home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / mus / play / dmdev.lha / delfinampeg.device / src / MP3.a56 < prev    next >
Text File  |  2000-11-04  |  81KB  |  2,742 lines

  1. ;*****************************************************************************
  2. ;
  3. ;    delfinampeg.device - mpeg.device for Delfina DSP
  4. ;    Copyright (C) 2000  Michael Henke
  5. ;
  6. ;    This program is free software; you can redistribute it and/or modify
  7. ;    it under the terms of the GNU General Public License as published by
  8. ;    the Free Software Foundation; either version 2 of the License, or
  9. ;    (at your option) any later version.
  10. ;
  11. ;    This program is distributed in the hope that it will be useful,
  12. ;    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. ;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. ;    GNU General Public License for more details.
  15. ;
  16. ;    You should have received a copy of the GNU General Public License
  17. ;    along with this program; if not, write to the Free Software
  18. ;    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19. ;
  20. ;*****************************************************************************
  21.  
  22.  
  23.  
  24. ;Delfina object DSP56K_MP3
  25. ;memory map (for Amiga access)
  26. ;
  27. ; prog
  28. ;    0 .. init
  29. ;   +2 .. decode frame
  30. ;
  31. ; xdata
  32. ;+2048 .. inbuf (framedata: +0..side info, +11 words..main_data)
  33. ;+2710 .. quantab_p (512 words; allocated and precalculated by main prog)
  34. ;
  35. ; ydata
  36. ;  +16 .. busy (Amiga read only, TRUE (NON-ZERO) if decoder is running)
  37. ;  +17 .. forcemono (Amiga write)
  38. ;  +18 .. pow43tab (8206 words; precalculated by main prog)
  39. ;
  40.     include 'delfequ.inc'
  41.  
  42.     org    p:
  43. ;->prog
  44.     jmp    init
  45. ;->prog+2
  46.  
  47.  
  48.  
  49. ;*****************************************************************************
  50. ;
  51. ; **** MPEG1 layer III frame decoder ****
  52. ;
  53. ; parameters
  54. ;  x1 - mono          (mono: non_zero, stereo: zero)
  55. ;  x0 - output buffer (1152 words in L-mem)
  56. ;  y1 - modext        (from frame header: mode extension)
  57. ;  y0 - /
  58. ;
  59. ;
  60. ; uses ideas/code from:
  61. ;   - MPEG Audio Layer II decoder by Fredrik Noring and Tomas Berndtsson
  62. ;     (an mp2 player for Atari Falcon, DSP56K code)
  63. ;   - amp11 by Niklas Beisert (clean and fast C++ code)
  64. ;   - FalcAMP by Denis "STGhost" Huguet and David "Splash" Carrere
  65. ;     (an mp3 player for Atari Falcon, DSP56K code)
  66. ;   - reference code by MPEG Software Simulation Group ("the original" C code)
  67. ;
  68. ; Delfina DSP programming by Smack/Infect!
  69. ;
  70. ;
  71. ; (Sun 09-Apr-2000) - finally: it's working!!
  72. ;                     (but INTENSITY STEREO decoding is not implemented yet)
  73. ; (Wed 26-Apr-2000) - optimized synthesis and hybrid filter routines
  74. ; (Sat 29-Apr-2000) - optimized huffman decoding routines
  75. ; (Tue 16-May-2000) - started implementing INTENSITY STEREO support
  76. ;                     but it's not working yet (temporarily removed)
  77. ; (Sun 16-Jul-2000) - optimized a little (tiny speedup only)
  78. ;
  79. ;*****************************************************************************
  80.  
  81.     move    x1,x:mono
  82.     move    x0,x:outbuf
  83.     move    y1,x:modext
  84.     tfr    x1,a    #>1,x1
  85.     tst    a    #>2,a
  86.     tne    x1,a
  87.     move    a,x:channels
  88.     move    a,y:busy        ;set BUSY to non-zero
  89.  
  90.     move    #>inbuf,r7
  91.     jsr    getbits_init
  92.  
  93. ; WARNING:
  94. ; the active 'getbits' routine occupies these registers: r5, r6, r7, b
  95. ; (their contents must not be changed!!)
  96. ;
  97. ; 'getbits' is used in the bitstream processing routines:
  98. ; * get side info
  99. ; * read scalefactors
  100. ; * read huffman
  101. ;
  102. ; this register limitation does not exist in the other parts of the decoder
  103.  
  104.  
  105.  
  106. ;*****************************************************************************
  107. ;*** get side info
  108. ;*****************************************************************************
  109.     clr    a    #<9,n7
  110.     jsr    (r5)            ;getbits(9) - main_data_begin
  111.  
  112.     move    x:mono,a
  113.     move    #>5,x0
  114.     tst    a    #>3,a
  115.     tne    x0,a
  116.     clr    a    a,n7
  117.     jsr    (r5)            ;getbits(mono?5:3) - private_bits
  118.  
  119. ;****** read scalefactor selection info
  120.     move    x:mono,a
  121.     move    #>4,x0
  122.     tst    a    #>8,a
  123.     tne    x0,a            ;loops=mono?4:8
  124.     move    #>granule1_sfsi,r0
  125.     do    a,read_sfsi
  126.     jsr    (r6)            ;getbit1
  127.     move    a,x:(r0)+
  128. read_sfsi
  129.  
  130. ;****** read granule side info
  131.     move    #>si_tab,r3        ;first granule
  132.     move    x:channels,n3
  133.     move    #<0,y1            ;y1=bitpos
  134.     move    #<0,x1            ;x1=granule_counter
  135.  
  136. read_grsi_loop_head
  137.     do    n3,read_grsi_loop    ;channels
  138.     move    x:(r3)+,r0        ;r0=pointer to si_struct
  139.  
  140.     clr    a    #<12,n7
  141.     jsr    (r5)            ;getbits(12)
  142.     add    y1,a    y1,x:(r0)+    ;si.grstart=bitpos
  143.     move        a,x:(r0)+    a,y1    ;si.grend=bitpos_new
  144.     clr    a    #<9,n7
  145.     jsr    (r5)            ;getbits(9)
  146.     lsl    a    #<8,n7        ;*2
  147.     clr    a    a,x:(r0)+    a,y0    ;si.regionend2  !!  y0
  148.     jsr    (r5)            ;getbits(8)
  149.     move        a,x:(r0)+    ;si.globalgain
  150.     clr    a    #<4,n7
  151.     jsr    (r5)            ;getbits(4)
  152.     clr    a    a,x:(r0)+    ;si.sfcompress
  153.     jsr    (r6)            ;getbit1
  154.     jeq    read_grsi_block0
  155.  
  156.     clr    a    #<2,n7
  157.     jsr    (r5)            ;getbits(2)
  158.     clr    a    a,x:(r0)+    ;si.blocktype
  159.     jsr    (r6)            ;getbit1
  160.     move        a,x:(r0)+    ;si.mixedblock
  161.     clr    a    #<5,n7
  162.     jsr    (r5)            ;getbits(5)
  163.     clr    a    a,x:(r0)+    ;si.tabsel0
  164.     jsr    (r5)            ;getbits(5)
  165.     clr    a    a,x:(r0)+    ;si.tabsel1
  166.     move        a,x:(r0)+    ;si.tabsel2=0
  167.     do    #3,read_grsi_sbg_loop
  168.     clr    a    #<3,n7
  169.     jsr    (r5)            ;getbits(3)
  170.     rep    #3
  171.     lsl    a
  172.     move        a,x:(r0)+    ;si.subblockgain012 * 8 !!!!
  173. read_grsi_sbg_loop
  174.     move    #<36,a1
  175.     move    a1,x:(r0)        ;si.regionend0
  176.     move    #>576,x0        ;x0=si.regionend1
  177.     jmp    read_grsi_block0e
  178.  
  179. read_grsi_block0
  180.     move        a,x:(r0)+    ;si.blocktype =0
  181.     move        a,x:(r0)+    ;si.mixedblock=0
  182.     move    #<5,n7
  183.     do    #3,read_grsi_tabsel_loop
  184.     jsr    (r5)            ;getbits(5)
  185.     clr    a    a,x:(r0)+    ;si.tabsel012
  186. read_grsi_tabsel_loop
  187.     rep    #3
  188.     move        a,x:(r0)+    ;si.subblockgain012
  189.     move    #<4,n7
  190.     jsr    (r5)            ;getbits(4)
  191.     move    #>1,x0
  192.     add    x0,a    x:sfbandl_p,r2    ;+1
  193.     clr    a    a,n2
  194.     move    #<3,n7
  195.     jsr    (r5)            ;getbits(3)
  196.     add    x0,a    n2,x0        ;+1
  197.     add    x0,a    x:(r2+n2),x0    ;+region0count
  198.     move    a,n2
  199.     move    x0,x:(r0)        ;si.regionend0
  200.     move    x:(r2+n2),x0        ;x0=si.regionend1
  201.  
  202. read_grsi_block0e
  203.     move    x:(r0),a
  204.     cmp    y0,a            ;? si.regionend0 > si.regionend2 ?
  205.     tpl    y0,a
  206.     tfr    x0,a    a,x:(r0)+    ;si.regionend0
  207.     cmp    y0,a    #>33,x0        ;? si.regionend1 > si.regionend2 ?
  208.     tpl    y0,a
  209.     clr    a    a,x:(r0)+    ;si.regionend1
  210.     jsr    (r6)            ;getbit1
  211.     clr    a    a,x:(r0)+    ;si.preflag
  212.     jsr    (r6)            ;getbit1
  213.     move    #>1,y0
  214.     add    y0,a    #>32,y0
  215.     clr    a    a,x:(r0)+    ;si.sfshift + 1 !!!!
  216.     jsr    (r6)            ;getbit1
  217.     tne    x0,a            ;33
  218.     teq    y0,a            ;32
  219.     move        a,x:(r0)+    ;si.tabsel3
  220.  
  221. read_grsi_loop
  222.     tfr    x1,a    #<1,x1        ;granule_counter
  223.     tst    a    #>si_tab+2,r3
  224.     jeq    read_grsi_loop_head    ;second granule
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232. ;*****************************************************************************
  233. ;****** for(gr=0;gr<ngr;gr++)        ;decode 2 granules
  234.     move    #>si_tab,r0
  235.     move    #>granule0_sfsi,n0
  236.     clr    a    x:outbuf,r1
  237.  
  238. decode_granule_loop
  239.     move    r0,x:si_granule_tab_p
  240.     move    n0,x:sfsi_p
  241.     move    r1,x:outbuf
  242.     move    a,x:granule_counter
  243.  
  244. ;*****************************************************************************
  245. ;****** for(ch=0;ch<stereo;ch++)    ;read+scale 1 or 2 channels
  246.     move    #>scalefac0,r3
  247.     move    x:channels,a
  248.     move    #>xr0,r1
  249.  
  250. scale_channel_loop
  251.     move    r0,x:si_tab_p
  252.     move    r1,x:xr_p
  253.     move    a,x:channel_counter
  254.  
  255.     clr    a    r3,x:scalefac_p
  256.     rep    #576
  257.     move    a,x:(r1)+        ;clear xr
  258.  
  259. ;****** move bitstream pointer to si.grstart
  260.     move    x:si_tab_p,r1
  261.     move    #>inbuf+11,r7        ;skip sideinfo
  262.     move    x:(r1),r1        ;r1=si_struct            !! r1
  263.     move    #>24,x0
  264.     move    x:(r1),a        ;si.grstart
  265. move_to_grstart
  266.     sub    x0,a    (r7)+
  267.     jgt    move_to_grstart
  268.     add    x0,a    (r7)-
  269.     jsr    getbits_init        ;skip bits (24bit words)
  270.     tst    a    a,n7
  271.     jsne    (r5)            ;getbits
  272.     move    #<sfcompress-si0,n1
  273.     move    x:(r1),b0        ;si.grstart - correct bit counter!
  274.  
  275.  
  276. ;*****************************************************************************
  277. ;*** read scalefactors
  278. ;*****************************************************************************
  279.     move    x:(r1+n1),n2        ;si.sfcompress
  280.     move    #>slentab0,r2
  281.     move    #>newslen,r0
  282.     move    x:(r2+n2),a
  283.     move    a,x:(r0)+        ;newslen0=slentab0[si.sfcompress]
  284.     move    #>slentab1,r2
  285.     move    a,x:(r0)+        ;newslen1=slentab0[si.sfcompress]
  286.     move    x:(r2+n2),a
  287.     move    a,x:(r0)+        ;newslen2=slentab1[si.sfcompress]
  288.     move    #<blocktype-si0,n1
  289.     move    a,x:(r0)+        ;newslen3=slentab1[si.sfcompress]
  290. ;****** select sfbtab
  291.     move    x:(r1+n1),a        ;si.blocktype
  292.     move    #>2,x0
  293.     cmp    x0,a    #>sfbtab0,a    ;sfb=sfbtab0  (blocktype!=2)
  294.     jne    read_sf_ne2
  295.     move    #<mixedblock-si0,n1
  296.     move    #>sfbtab1,x0
  297.     move    x:(r1+n1),a        ;si.mixedblock
  298.     tst    a    #>sfbtab2,a    ;sfb=sfbtab2  (mixedblock)
  299.     teq    x0,a            ;sfb=sfbtab1  (!mixedblock)
  300. read_sf_ne2
  301.     move    a,r2            ;r2=sfb
  302.     move    x:sfsi_p,r1        ;r1=sfsi
  303.     move    #>newslen,r0        ;r0=newslen  ;r3=sfp (scalefac0/1)
  304.  
  305. ;****** read scalefactors
  306.     do    #4,read_sf_loop0
  307.     move    x:(r2)+,x0        ;sfb[i]
  308.     move    x:(r2),a        ;sfb[i+1]
  309.     sub    x0,a
  310.     move    x:(r1)+,a    a,y0    ;sfsi[i]
  311.     tst    a        y0,n3    ;sfb[i+1]-sfb[i]
  312.     move    x:(r0)+,a        ;newslen[i]
  313.     jne    read_sf_skip        ;if(!sfsi[i])
  314.  
  315.     do    n3,read_sf_loop1    ;for(k=sfb[i];k<sfb[i+1];k++)
  316.     clr    a        a,x0
  317.     cmp    x0,a        x0,n7
  318.     jsne    (r5)            ;getbits
  319.     move    a,x:(r3)+    x0,a    ;*sfp++=getbits(newslen[i])
  320. read_sf_loop1
  321.     move    (r3)-n3
  322.  
  323. read_sf_skip
  324.     move    (r3)+n3            ;else sfp+=sfb[i+1]-sfb[i]
  325. read_sf_loop0
  326.  
  327.     clr    a    r1,x:sfsi_p
  328.     rep    #3
  329.     move    a,x:(r3)+        ;what's this?!?  (taken from amp11)
  330.  
  331.  
  332.  
  333. ;*****************************************************************************
  334. ;*** read huffman
  335. ;*****************************************************************************
  336.     move    x:si_tab_p,r1
  337.     move    #<blocktype-si0,n1
  338.     move    x:(r1),r1        ;r1=si_struct            !! r1
  339. ;****** select reorder table
  340.     move    #>2,x0
  341.     move    x:(r1+n1),a        ;si.blocktype
  342.     cmp    x0,a    x:ro0_p,a    ;ro=ro0  (blocktype!=2)
  343.     jne    huff_ne2
  344.     move    #<mixedblock-si0,n1
  345.     move    x:ro1_p,x0
  346.     move    x:(r1+n1),a        ;si.mixedblock
  347.     tst    a    x:ro2_p,a    ;ro=ro2  (mixedblock)
  348.     teq    x0,a            ;ro=ro1  (!mixedblock)
  349. huff_ne2
  350.  
  351. ;****** read region0
  352.     move    #<regionend0-si0,n1
  353.     move    a,r2            ;r2=ro (reorder table)
  354.     move    x:xr_p,r3        ;r3=xr (output)
  355.     move    #>pow43tab,r4        ;r4=pow43tab
  356.     move    x:(r1+n1),a        ;si.regionend0
  357.     asr    a    #<tabsel0-si0,n1
  358.     move    a,n3            ;n3=loop_count
  359.     tst    a    x:(r1+n1),n0    ;si.tabsel0
  360.     jsgt    huff_region012
  361. ;****** read region1
  362.     move    #<regionend0-si0,n1
  363.     nop
  364.     move    x:(r1+n1),x0        ;si.regionend0
  365.     move    #<regionend1-si0,n1
  366.     nop
  367.     move    x:(r1+n1),a        ;si.regionend1
  368.     sub    x0,a
  369.     asr    a    #<tabsel1-si0,n1
  370.     move    a,n3            ;n3=loop_count
  371.     tst    a    x:(r1+n1),n0    ;si.tabsel1
  372.     jsgt    huff_region012
  373. ;****** read region2
  374.     move    #<regionend1-si0,n1
  375.     nop
  376.     move    x:(r1+n1),x0        ;si.regionend1
  377.     move    #<regionend2-si0,n1
  378.     nop
  379.     move    x:(r1+n1),a        ;si.regionend2
  380.     sub    x0,a
  381.     asr    a    #<tabsel2-si0,n1
  382.     move    a,n3            ;n3=loop_count
  383.     tst    a    x:(r1+n1),n0    ;si.tabsel2
  384.     jsgt    huff_region012
  385.  
  386.     jmp    huff_region012_end
  387.  
  388. ;--vv-------------------------------vv--
  389. huff_region012
  390.     move    #>htablinbits,r0
  391.     move    #>15,x1            ;x1=#15                !! x1
  392.     move    x:(r0+n0),n2        ;n2=linbits
  393.     move    #>htabs,r0
  394.     move    r1,n1            ;save r1
  395.     move    #>huff_dec012,r1    ;r1=huff_dec012
  396.     move    #>huff_dec012_end,r6    ;r6=huff_dec012_end
  397.     move    #<3,n6            ;n6=#3
  398.     move    x:(r0+n0),n5        ;n5=htab
  399.     move    n5,r0            ;tab
  400.  
  401.     do    n3,huff_loop012
  402. huff_dec012
  403.     move    x:(r0)+,x0        ;v=*tab++
  404.     mpy    x0,#3,a            ;if(v>=0)
  405.     jge    (r6)-n6    ;huff_dec012_end    ;return v
  406. ;    ---getbit1 inline
  407.     inc    b
  408.     lsl    b    x0,n0
  409.     jne    (r6)+n6    ;huff_dec012_gb_ne
  410.     move    x:(r7)+,b1
  411.     rol    b
  412. huff_dec012_gb_ne
  413. ;    ---^
  414.     jcc    (r1)    ;huff_dec012    ;if(getbit1)
  415.     move    (r0)-n0            ;tab-=v
  416.     jmp    (r1)    ;huff_dec012
  417. huff_dec012_end
  418.  
  419.     move    (r6)+n6
  420.     lsr    a    x:(r2)+,n3    ;x=val>>4
  421.     jeq    huff_r012_zero_0
  422.     move    #<0,a0
  423.     cmp    x1,a    a,n4        ;if(x==15)
  424.     jne    huff_r012_ne15_0
  425.     clr    a    n2,y0
  426.     cmp    y0,a    n2,n7
  427.     jsne    (r5)            ;getbits(linbits)
  428.     add    x1,a            ;+15
  429.     move    a,n4
  430. huff_r012_ne15_0
  431. ;    ---getbit1 inline
  432.     inc    b
  433.     lsl    b    y:(r4+n4),a    ;v=pow43tab[x]
  434.     jne    huff_r012_gb_ne_0
  435.     move    x:(r7)+,b1
  436.     rol    b
  437. huff_r012_gb_ne_0
  438. ;    ---^
  439.     neg    a    a,y0        ;(keep CARRY bit!)
  440.     tcc    y0,a            ;if(getbit1) v=-v
  441. huff_r012_zero_0
  442.     tfr    x0,a    a,x:(r3+n3)    ;xr[ro[i+0]]=v
  443.  
  444.     and    x1,a    x:(r2)+,n3    ;x=val&15 
  445.     jeq    huff_r012_zero_1
  446.     cmp    x1,a    a,n4        ;if(x==15)
  447.     jne    huff_r012_ne15_1
  448.     clr    a    n2,y0
  449.     cmp    y0,a    n2,n7
  450.     jsne    (r5)            ;getbits(linbits)
  451.     add    x1,a            ;+15
  452.     move    a,n4
  453. huff_r012_ne15_1
  454. ;    ---getbit1 inline
  455.     inc    b
  456.     lsl    b    y:(r4+n4),a    ;v=pow43tab[x]
  457.     jne    huff_r012_gb_ne_1
  458.     move    x:(r7)+,b1
  459.     rol    b
  460. huff_r012_gb_ne_1
  461. ;    ---^
  462.     neg    a    a,y0        ;(keep CARRY bit!)
  463.     tcc    y0,a            ;if(getbit1) v=-v
  464. huff_r012_zero_1
  465.     move    n5,r0            ;tab
  466.     move    a,x:(r3+n3)        ;xr[ro[i+1]]=v
  467. huff_loop012
  468.     move    n1,r1            ;restore r1
  469.     rts
  470. ;--^^-------------------------------^^--
  471. huff_region012_end
  472.  
  473.  
  474. ;****** read region3
  475.     move    #<regionend2-si0,n1
  476.     move    #>576,a
  477.     move    x:(r1+n1),x0        ;si.regionend2
  478.     move    #<grend-si0,n1
  479.     sub    x0,a    #>huff_dec3_gb_ne,r6
  480.     asr    a    x:(r1+n1),x1    ;si.grend            !! x1
  481.     asr    a    #<tabsel3-si0,n1
  482.     move    #>htabs,r0
  483.     move    x:(r1+n1),n0        ;si.tabsel3
  484.     jle    huff_region3_end    ;--> skip ( because regionend2>=576 )
  485.     move    x:(r0+n0),n1        ;n1=htab
  486.     move    a,x0    y:pow43tab+1,a
  487.     neg    a    a,n2        ;n2= pow43tab[1]        !! n2
  488.     tfr    x0,a    a,y0        ;y0=-pow43tab[1]        !! y0
  489.     move    #>huff_dec3,r1
  490.  
  491.  
  492.     do    a,huff_loop3
  493.     move    b0,a            ;bit counter
  494.     cmp    x1,a    n1,r0        ;tab
  495.     jmi    huff_dec3        ;while(huffbit<si.grend)
  496.     enddo
  497.     jmp    huff_loop3
  498. huff_dec3
  499.     move    x:(r0)+,x0        ;v=*tab++
  500.     jclr    #23,x0,huff_dec3_end    ;if(v>=0) return v
  501. ;    ---getbit1 inline
  502.     inc    b
  503.     lsl    b    x0,n0
  504.     jne    (r6)    ;huff_dec3_gb_ne
  505.     move    x:(r7)+,b1
  506.     rol    b
  507. huff_dec3_gb_ne
  508. ;    ---^
  509.     jcc    (r1)    ;huff_dec3    ;if(getbit1)
  510.     move    (r0)-n0            ;tab-=v
  511.     jmp    (r1)    ;huff_dec3
  512. huff_dec3_end
  513.  
  514.     clr    a    x:(r2)+,n3    ;ro[i+0]
  515.     jclr    #3,x0,huff_r3_zero_3    ;if(x=(val>>3)&1)
  516. ;    ---getbit1 inline
  517.     inc    b
  518.     lsl    b    n2,a        ;x
  519.     jne    huff_r3_gb_ne_3
  520.     move    x:(r7)+,b1
  521.     rol    b
  522. huff_r3_gb_ne_3
  523. ;    ---^                ;if(getbit1)
  524.     tcs    y0,a            ;x=-x
  525. huff_r3_zero_3
  526.     move    a,x:(r3+n3)        ;xr[ro[i+0]]=x
  527.  
  528.     clr    a    x:(r2)+,n3    ;ro[i+1]
  529.     jclr    #2,x0,huff_r3_zero_2    ;if(x=(val>>2)&1)
  530. ;    ---getbit1 inline
  531.     inc    b
  532.     lsl    b    n2,a        ;x
  533.     jne    huff_r3_gb_ne_2
  534.     move    x:(r7)+,b1
  535.     rol    b
  536. huff_r3_gb_ne_2
  537. ;    ---^                ;if(getbit1)
  538.     tcs    y0,a            ;x=-x
  539. huff_r3_zero_2
  540.     move    a,x:(r3+n3)        ;xr[ro[i+1]]=x
  541.  
  542.     clr    a    x:(r2)+,n3    ;ro[i+2]
  543.     jclr    #1,x0,huff_r3_zero_1    ;if(x=(val>>1)&1)
  544. ;    ---getbit1 inline
  545.     inc    b
  546.     lsl    b    n2,a        ;x
  547.     jne    huff_r3_gb_ne_1
  548.     move    x:(r7)+,b1
  549.     rol    b
  550. huff_r3_gb_ne_1
  551. ;    ---^                ;if(getbit1)
  552.     tcs    y0,a            ;x=-x
  553. huff_r3_zero_1
  554.     move    a,x:(r3+n3)        ;xr[ro[i+2]]=x
  555.  
  556.     clr    a    x:(r2)+,n3    ;ro[i+3]
  557.     jclr    #0,x0,huff_r3_zero_0    ;if(x=val&1)
  558. ;    ---getbit1 inline
  559.     inc    b
  560.     lsl    b    n2,a        ;x
  561.     jne    huff_r3_gb_ne_0
  562.     move    x:(r7)+,b1
  563.     rol    b
  564. huff_r3_gb_ne_0
  565. ;    ---^                ;if(getbit1)
  566.     tcs    y0,a            ;x=-x
  567. huff_r3_zero_0
  568.     move    a,x:(r3+n3)        ;xr[ro[i+3]]=x
  569. huff_loop3
  570.  
  571. huff_region3_end
  572.  
  573.  
  574. ;;;    jsr    getbits_pause        ;(not really required)
  575.  
  576.  
  577.  
  578. ; from now on we can use all registers again
  579. ; because 'getbits' is no longer active (r5, r6, r7, b)
  580.  
  581.  
  582.  
  583. ;*****************************************************************************
  584. ;*** scale samples
  585. ;*****************************************************************************
  586.     move    x:si_tab_p,r1
  587.     move    #<blocktype-si0,n1
  588.     move    x:(r1),r1        ;r1=si_struct            !! r1
  589. ;****** number of LONG and SHORT bands
  590.     move    #>2,x0
  591.     move    x:(r1+n1),a        ;si.blocktype
  592.     move    #>13,b            ;s_min=13 (blocktype!=2)
  593.     cmp    x0,a    #>22,a        ;l_max=22 (blocktype!=2)
  594.     jne    scale_ne2
  595.     move    #<mixedblock-si0,n1
  596.     move    #<0,x0
  597.     move    x:(r1+n1),a        ;si.mixedblock
  598.     move    #>3,b            ;s_min=3  (mixedblock)
  599.     tst    a    #>8,a        ;l_max=8  (mixedblock)
  600.     teq    x0,b            ;s_min=0  (!mixedblock)
  601.     teq    x0,a            ;l_max=0  (!mixedblock)
  602. scale_ne2
  603.     move    #<globalgain-si0,n1
  604.     move    b,n5            ;n5=s_min
  605.     move    x:(r1+n1),n6        ;n6=si.globalgain
  606.     move    x:scalefac_p,r2        ;r2=sfp
  607.     move    #<sfshift-si0,n1
  608.     move    x:quantab_p,n4        ;n4=quantab
  609.     move    x:(r1+n1),n2        ;n2=si.sfshift (+1 = 1 or 2)
  610.     move    #<subblockgain0-si0,n1
  611.     move    #>pretab,r4        ;r4=pretab
  612.     lua    (r1)+n1,r7        ;r7=&si.subblockgain0
  613.  
  614.  
  615. ;****** scale LONG bands
  616.     tst    a    a,x1
  617.     jeq    scale_l_loop0        ;-->skip ( because l_max==0 )
  618.     move    #<preflag-si0,n1
  619.     move    x:xr_p,r0        ;r0=xr
  620.     move    x:(r1+n1),n0        ;n0=si.preflag
  621.     move    x:sfbandl_p,r5        ;r5=bil
  622.     move    n0,a            ;preflag
  623.  
  624.     do    x1,scale_l_loop0    ;for (j=0; j<l_max; j++)
  625.     tst    a    x:(r4)+,x1    ;pretab[j]
  626.     tne    x1,a            ;a=(preflag ? pretab[j] : 0)
  627.     move        x:(r2)+,x1    ;*sfp++
  628.     add    x1,a    n6,x0        ;a+=sf  ;gg
  629.     rep    n2
  630.     lsl    a    r0,r1        ;a<<=sfshift (1 or 2)
  631.     neg    a    #<0,y0        ;a=-a    ;y0=0 (for DP Multiply mode!!)
  632.     add    x0,a    n4,r3        ;a+=gg  ;quantab
  633.     tmi    y0,a
  634.     lsl    a    x:(r5)+,x1    ;a<<=1  ;bil[j]
  635.     move    a,n3
  636.     move        x:(r5),b    ;bil[j+1]
  637.     sub    x1,b    (r3)+n3        ;quantab[gg-(sf+pre)<<shift]
  638.     move        y:(r3)+,x1    ;MSP
  639.     clr    a    y:(r3),x0    ;LSP    ;a=0 (for DP Multiply mode!!)
  640.  
  641. ;this is the "fastest" version of the Double Precision Multiply scaling loop
  642. ;(no checks for overflow; no "move #0,a" between two calculations)
  643. ;(assumption: the results are ALWAYS in the __lowest_18bit_of_a0__ only)
  644.     lsr    b    x:(r0),y1
  645.     ori    #$40,mr        ;enter Double Precision Multiply mode
  646.     do    b,scale_l_loop1        ;for (i=bil[j]; i<bil[j+1]; i++)
  647.     mac    x0,y1,a    (r0)+        ;LSP*SP
  648.     mac    y1,x1,a    x:(r0)+,y1    ;shifted(a)+SP*MSP
  649.     mac    x0,y1,a    a0,x:(r1)+    ;LSP*SP
  650.     mac    y1,x1,a    x:(r0),y1    ;shifted(a)+SP*MSP
  651.     move        a0,x:(r1)+
  652. scale_l_loop1
  653.     andi    #$bf,mr        ;exit Double Precision Multiply mode
  654.  
  655.     move    n0,a            ;preflag
  656. scale_l_loop0
  657.  
  658.  
  659. ;****** scale SHORT bands
  660.     move    n5,x1            ;s_min
  661.     move    #>13,a
  662.     sub    x1,a    x:sfbands_p,r5
  663.     jle    scale_s_loop0        ;--> skip ( because s_min>=13 )
  664.  
  665.     move    (r5)+n5            ;r5=&bis[s_min]
  666.     move    #<3,n0            ;n0=3
  667.     move    n4,n5            ;n5=quantab
  668.     move    x:xr_p,r4
  669.  
  670.     do    a,scale_s_loop0        ;for (j=s_min; j<13; j++)
  671.     move        x:(r5)+,n4    ;bis[j]
  672.     move        x:(r5),a    ;bis[j+1]
  673.     move    n4,x1
  674.     move        (r4)+n4        ;r4=&xr[bis[j]]
  675.     sub    x1,a    n0,x0
  676.     move    a,x1
  677.     jsr    <delf_div        ;(bis[j+1]-bis[j])/3
  678.     rnd    a    r7,r6        ;r6=&si.subblockgain0
  679.     move    a,n4            ;n4=(inner loop count)
  680.  
  681.     do    #3,scale_s_loop1    ;for (k=0; k<3; k++)
  682.     move        x:(r2)+,a    ;a=*sfp++
  683.     rep    n2
  684.     lsl    a    x:(r6),x1    ;a<<=sfshift (1 or 2)
  685.     ;                ;x1=si.subblockgain[k]  (* 8 !!!!)
  686.     add    x1,a    n6,x0        ;a+=sbg ;gg
  687.     neg    a    #<0,y0        ;a=-a    ;y0=0 (for DP Multiply mode!!)
  688.     add    x0,a    (r6)+        ;a+=gg
  689.     tmi    y0,a
  690.     lsl    a    n5,r3        ;a<<=1    ;quantab
  691.     move    a,n3
  692.     move    r4,r0            ;r0=&xr[bis[j]+k]
  693.     move        (r3)+n3        ;quantab[gg-sf<<shift-sbg]
  694.     move        y:(r3)+,x1    ;MSP
  695.     clr    a    y:(r3),x0    ;LSP    ;a=0 (for DP Multiply mode!!)
  696.  
  697. ;this is the "fastest" version of the Double Precision Multiply scaling loop
  698. ;(no checks for overflow; no "move #0,a" between two calculations)
  699. ;(assumption: the results are ALWAYS in the __lowest_18bit_of_a0__ only)
  700.     ori    #$40,mr            ;enter Double Precision Multiply mode
  701.     move        x:(r0),y1
  702.     do    n4,scale_s_loop2    ;for (i=bis[j]; i<bis[j+1]; i+=3)
  703.     mac    x0,y1,a    (r0)+n0        ;LSP*SP
  704.     mac    y1,x1,a    x:(r0)-n0,y1    ;shifted(a)+SP*MSP
  705.     move        a0,x:(r0)+n0
  706. scale_s_loop2
  707.     andi    #$bf,mr            ;exit Double Precision Multiply mode
  708.  
  709.     move    (r4)+            ;r4=&xr[bis[j]+k]
  710. scale_s_loop1
  711.  
  712.     move    x:xr_p,r4
  713. scale_s_loop0
  714.  
  715.  
  716.     move    x:si_tab_p,r0
  717.     move    #>scalefac1,r3
  718.     move    #>xr1,r1
  719.     move    x:channel_counter,a
  720.     lsr    a    (r0)+
  721.     jne    scale_channel_loop    ;next channel
  722.  
  723. ;****** for(ch=0;ch<stereo;ch++)    ;end************************
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731. ;*****************************************************************************
  732. ;*** joint-stereo processing
  733. ;*****************************************************************************
  734.     move    x:modext,a
  735.     tst    a    #>2,x0
  736.     jeq    js_end                ;modext==0 -> no joint-stereo
  737.     cmp    x0,a    #>xr0,r0
  738.     jne    js_modext_1_3
  739.  
  740. ;****** modext==2 - mid/side stereo for all samples
  741.     move    #>xr1,r1
  742.     move    r1,r2
  743.     move    #0.70710678,y0            ;sqrt(0.5)
  744.     move            x:(r0),x0
  745.     mpy    x0,y0,a        x:(r1)+,x1
  746.     macr    x1,y0,a
  747.     mpy    x0,y0,b        a,x:(r0)+
  748.     macr    -x1,y0,b    x:(r0),x0
  749.     do    #576-1,js_ms_loop
  750.     mpy    x0,y0,a        x:(r1)+,x1
  751.     macr    x1,y0,a        b,x:(r2)+
  752.     mpy    x0,y0,b        a,x:(r0)+
  753.     macr    -x1,y0,b    x:(r0),x0
  754. js_ms_loop
  755.     move            b,x:(r2)+
  756.     jmp    js_end
  757.  
  758.  
  759. ;****** modext==1 or 3 - intensity stereo
  760. js_modext_1_3
  761. ;
  762. ; note: intensity stereo decoding is not finished yet
  763. ;       due to lack of motivation...
  764. ;       but who cares about that, anyway?!?
  765. ;
  766.     move    a,n7            ;n7=modext            !! n7
  767.  
  768.  
  769. ;******    SHORT bands
  770.  
  771. ;to be done...
  772.  
  773.  
  774. ;******    LONG bands
  775.  
  776. ;to be verified, there's something wrong in here...
  777.  
  778. ;    move    #<22,n5        ;!!!! number of long bands !!!!
  779. ;
  780. ;    move    #>scalefac1,r2    ;!!!!
  781. ;    move    #>ktab,r6    ;!!!!
  782. ;
  783. ;    move    #>scalefac1+20,r0
  784. ;    move    x:sfbandl_p,r5
  785. ;    move    x:(r0)+,x0        ;copy sf(20) to sf(21)
  786. ;    move    x0,x:(r0)
  787. ;
  788. ;    move    #>xr0,r0
  789. ;    move    #>xr1,r1
  790. ;
  791. ;;    *** find highest non-zero sample
  792. ;    move    x:(r5+n5),n1        ;bil[sfbhigh]
  793. ;    move    #>1,x1
  794. ;    lua    (r1)+n1,r3
  795. ;    move    #>js_is_loop_l_0,r4
  796. ;    move    (r3)-
  797. ;    move    n1,a
  798. ;js_is_loop_l_0
  799. ;    sub    x1,a    x:(r3)-,b
  800. ;    tst    b    a,n4        ;n4=isbound
  801. ;    jeq    (r4)            ;js_is_loop_l_0
  802. ;;;;;    move    #576,n4
  803. ;
  804. ;;    *** process all LONG bands
  805. ;    do    n5,js_is_loop_l_1
  806. ;    move    x:(r5)+,x0        ;bil[i]
  807. ;    move    x:(r5),b        ;bil[i+1]
  808. ;    sub    x0,b    #>7,x1
  809. ;    move    b,n0            ;n0=bil[i+1]-bil[i]
  810. ;    move    x:(r2)+,a        ;a=ispos[i]
  811. ;    cmp    x1,a    b,n1
  812. ;    jeq    js_is_nois_l        ;!! ispos==7
  813. ;    tfr    x0,b    n4,y0        ;isbound
  814. ;    cmp    y0,b    a,n6        ;ispos
  815. ;    jle    js_is_nois_l        ;!! below isbound
  816. ;
  817. ;;    *** intensity-stereo
  818. ;    ori    #$08,mr            ;SCALE UP mode
  819. ;    move    l:(r6+n6),y        ;y1=ktab[ispos][0]  y0=ktab[ispos][1]
  820. ;    move            x:(r0),x0
  821. ;    do    n0,js_is_loop_l_2
  822. ;    mpy    x0,y1,a
  823. ;    asl    a
  824. ;    mpy    x0,y0,a        a,x:(r0)+
  825. ;    asl    a        x:(r0),x0
  826. ;    move            a,x:(r1)+    ;sub-optimal...
  827. ;js_is_loop_l_2
  828. ;    andi    #$f3,mr            ;NO SCALING mode
  829. ;    jmp    js_is_loop_ms_l        ;rewind xr pointers
  830. ;
  831. ;;    *** mid/side-stereo
  832. ;js_is_nois_l
  833. ;    btst    #1,n7
  834. ;    jeq    js_is_noms_l
  835. ;    move    #0.70710678,y0            ;sqrt(0.5)
  836. ;    move            x:(r0),x0
  837. ;    do    n0,js_is_loop_ms_l
  838. ;    mpy    x0,y0,a        x:(r1),x1
  839. ;    macr    x1,y0,a
  840. ;    mpy    x0,y0,b        a,x:(r0)+
  841. ;    macr    -x1,y0,b    x:(r0),x0
  842. ;    move            b,x:(r1)+    ;sub-optimal...
  843. ;js_is_loop_ms_l
  844. ;    move    (r0)-n0            ;rewind xr pointers
  845. ;    move    (r1)-n1
  846. ;js_is_noms_l
  847. ;    move    (r0)+n0            ;forward xr pointers
  848. ;    move    (r1)+n1
  849. ;js_is_loop_l_1
  850.  
  851.  
  852.  
  853. js_end
  854.  
  855.  
  856.  
  857.  
  858.  
  859. ;*****************************************************************************
  860. ;****** for(ch=0;ch<stereo;ch++)    ;filter+synthesize 1 or 2 channels
  861.     move    x:si_granule_tab_p,r0
  862.     move    #>xr0,r1
  863.     move    #>hybrid_prev0,r2
  864.     move    #>synth_audio_l_p,r3
  865.     move    x:channels,a
  866.  
  867. hybrid_synth_channel_loop
  868.     move    r0,x:si_tab_p
  869.     move    r1,x:xr_p
  870.     move    r2,x:prev_p
  871.     move    r3,x:synth_audio_pp
  872.     move    a,x:channel_counter
  873.  
  874.  
  875. ;*****************************************************************************
  876. ;*** hybrid filter
  877. ;*****************************************************************************
  878.     move    x:si_tab_p,r1
  879.     move    #<blocktype-si0,n1
  880.     move    x:(r1),r1        ;r1=si_struct
  881. ;****** select LONG / SHORT limit
  882.     move    #>2,b
  883.     move    x:(r1+n1),x0        ;x0=si.blocktype
  884.     cmp    x0,b    #>32,a        ; a=lim=32 (blocktype!=2)
  885.     jne    hybrid_block_ne2
  886.     move    #<mixedblock-si0,n1
  887.     move    #<0,x0            ;x0=0 (blocktype in mixedblock)
  888.     move    x:(r1+n1),a        ;si.mixedblock
  889.     tst    a    b,a        ; a=lim=2  (mixedblock)
  890.     teq    x0,a            ; a=lim=0  (!mixedblock)
  891. hybrid_block_ne2
  892.  
  893. ;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  894. ;    cmp    b,a    x:debug_mb_count,r0
  895. ;    jne    debug_mb_count__ne    ;if((blocktype==2) && mixedblock)
  896. ;    move    (r0)+
  897. ;debug_mb_count__ne
  898. ;    move    r0,x:debug_mb_count
  899. ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  900.  
  901.     move    a,n1            ;n1=lim              !! IMDCT !!
  902.     clr    b    #<36,n0
  903.     cmp    x0,b    #>imdct_windows,r0
  904.     jle    hybrid_win0
  905.     rep    x0
  906.     move    (r0)+n0            ;r0=&win[blocktype]  !! IMDCT !!
  907. hybrid_win0
  908.  
  909.  
  910. ;****** antialias butterflies
  911.     move    #>1,x0
  912.     sub    x0,a    x:xr_p,r4
  913.     jle    antialias_loop        ;--> skip  ( because lim<=1 )
  914.  
  915.     move    #<18,n4
  916.     move    x:cs_ca_tab_p,r3
  917.     movec    #<16-1,m3        ;modulo-16 addressing
  918.     move    (r4)+n4            ;upper band
  919.     move    r4,r2            ;upper band
  920.     lua    (r4)-,r5        ;lower band
  921.     move    #<18-8+1,n2
  922.     move    #<18-8+1,n4
  923.     move    #<18+8,n5
  924.     move            x:(r5),x0    y:(r3)+,y0
  925.     move    (r5)-n5
  926.  
  927.     do    a,antialias_loop
  928.     mpy    x0,y0,a        x:(r4)+,x1    y:(r3)+,y1
  929.     macr    -x1,y1,a    (r5)+n5                ;update r5
  930.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  931.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  932.     mpy    x0,y0,a        x:(r4)+,x1
  933.     macr    -x1,y1,a    b,x:(r2)+
  934.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  935.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  936.     mpy    x0,y0,a        x:(r4)+,x1
  937.     macr    -x1,y1,a    b,x:(r2)+
  938.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  939.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  940.     mpy    x0,y0,a        x:(r4)+,x1
  941.     macr    -x1,y1,a    b,x:(r2)+
  942.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  943.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  944.     mpy    x0,y0,a        x:(r4)+,x1
  945.     macr    -x1,y1,a    b,x:(r2)+
  946.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  947.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  948.     mpy    x0,y0,a        x:(r4)+,x1
  949.     macr    -x1,y1,a    b,x:(r2)+
  950.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  951.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  952.     mpy    x0,y0,a        x:(r4)+,x1
  953.     macr    -x1,y1,a    b,x:(r2)+
  954.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0
  955.     macr    x0,y1,b        x:(r5),x0    y:(r3)+,y1
  956.     mpy    x0,y0,a        x:(r4)+n4,x1            ;update r4
  957.     macr    -x1,y1,a    b,x:(r2)+
  958.     mpy    x1,y0,b        a,x:(r5)-    y:(r3)+,y0    ;!y0
  959.     macr    x0,y1,b        x:(r5+n5),x0            ;!x0
  960.     move            b,x:(r2)+n2            ;update r2
  961. antialias_loop
  962.  
  963.     movec    m7,m3            ;linear addressing
  964.  
  965.  
  966.  
  967.     move    x:xr_p,r7        ;r7=xr                !! r7
  968.     move    x:prev_p,n6        ;n6=prev            !! n6
  969.     move    #<0,n2            ;n2=sb&1 (even or odd subband)    !! n2
  970.  
  971. ;****** IMDCT for LONG bands
  972.     move    n1,a            ;lim
  973.     tst    a    r0,n7        ;n7=&win[blocktype]        !! n7
  974.     jle    imdct_l_loop0        ;--> skip  ( because lim<=0 )
  975.     do    a,imdct_l_loop0
  976.  
  977. ;-- 1. input aliasing for 36pts idct
  978.     move    r7,r1                ;get r1 (input pointer)
  979.     move    x:synth_imfct_p,r5        ;r5=imdct input area
  980.     movec    #<18-1,m5            ;m5 -> modulo-18 addressing
  981.     move        x:(r1)+,a
  982.     move        x:(r1)+,x0    a,y0
  983.     add    x0,a    x:(r1)+,x0    a,y:(r5)+
  984.     sub    y0,a    x:(r1)+,x1    a,y:(r5)+
  985.     add    x0,a    x0,y1
  986.     add    y0,a    x:(r1)+,x0    a,y:(r5)+
  987.     add    x1,a    x1,b
  988.     do    #3,imdct_l_input_alias
  989.     add    x0,b    x0,y0
  990.     move        x:(r1)+,x1    a,y:(r5)+
  991.     add    y1,b    x:(r1)+,x0    b,y:(r5)+
  992.     add    x1,b    x1,a
  993.     add    x0,a    x0,y1
  994.     move        x:(r1)+,x1    b,y:(r5)+
  995.     add    y0,a    x:(r1)+,x0    a,y:(r5)+
  996.     add    x1,a    x1,b
  997. imdct_l_input_alias
  998.     add    x0,b    #<9-1,n0
  999.     move        x:(r1)+,x1    a,y:(r5)+
  1000.     add    y1,b            b,y:(r5)+
  1001.     add    x1,b    #<4,n5
  1002.     move                b,y:(r5)+
  1003.  
  1004. ;-- 2. 9pts idct/butterflies/twiddle factors for even indices,
  1005. ;      and 36pts idct twiddle factors
  1006.     move    r5,r0                ;r0=&e0 (9 words in X: mem)
  1007.     move    #>imdct_l_tab,r2        ;r2=imdct coefficients
  1008.     lua    (r0)+n0,r1            ;r1=&e7 (should be named e8!)
  1009.     move                y:(r5)+n5,y0    ;;;
  1010.     tfr    y0,a    x:(r2)+,x0    y:(r5)+n5,y1
  1011.  
  1012.     mac    x0,y1,a    x:(r2)+,x0    y:(r5)+n5,y0
  1013.     mac    x0,y0,a    x:(r2)+,x1    y:(r5)+n5,y0    ;>>> 0.5    !! x1
  1014.     mac    x1,y0,a    x:(r2)+,x0    y:(r5)+n5,y0
  1015.     mac    x0,y0,a    x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp0/2
  1016.     asl    a                    ;a=tmp0
  1017.     mpy    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1018.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1019.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1020.     mac    x0,y0,b            y:(r5)+n5,y0    ;b'=tmp0_/2
  1021.     addl    a,b            y:(r5)+n5,y1    ;b=b'*2+a=b+a=e0 >>>0.5
  1022.     subl    b,a    b,x:(r0)+        ;a=a*2-b=2*a-(b+a)=a-b=e7
  1023. ;;;    rnd    b
  1024. ;;;    rnd    a    b,x:(r0)+
  1025.     tfr    y0,a    a,x:(r1)-
  1026.  
  1027.     mac    x1,y1,a            y:(r5)+n5,y0    ;>>> -0.5
  1028.     mac    -x1,y0,a        y:(r5)+n5,y0    ;>>> -1
  1029.     sub    y0,a            y:(r5)+n5,y0    ;>>> -0.5
  1030.     mac    -x1,y0,a x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp1/2  >>> 1.73/2
  1031.     asl    a            (r5)+n5        ;a=tmp0  >>> 0
  1032.     mpy    x0,y0,b            y:(r5)+n5,y0    ;>>> -1.73/2
  1033.     mac    -x0,y0,b        y:(r5)+n5,y0    ;>>> -1.73/2
  1034.     mac    -x0,y0,b        y:(r5)+n5,y0    ;b'=tmp1_/2    ;;;
  1035.     addl    a,b    x:(r2)+,x0    y:(r5)+n5,y1    ;b=b'*2+a=b+a=e1
  1036.     subl    b,a    b,x:(r0)+        ;a=a*2-b=2*a-(b+a)=a-b=e6
  1037. ;;;    rnd    b
  1038. ;;;    rnd    a    b,x:(r0)+
  1039.     tfr    y0,a    a,x:(r1)-
  1040.  
  1041.     mac    x0,y1,a    x:(r2)+,x0    y:(r5)+n5,y0
  1042.     mac    x0,y0,a            y:(r5)+n5,y0    ;>>> 0.5
  1043.     mac    x1,y0,a    x:(r2)+,x0    y:(r5)+n5,y0
  1044.     mac    x0,y0,a    x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp2/2
  1045.     asl    a                    ;a=tmp2
  1046.     mpy    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1047.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1048.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1049.     mac    x0,y0,b            y:(r5)+n5,y0    ;b'=tmp2_/2    ;;;
  1050.     addl    a,b    x:(r2)+,x0    y:(r5)+n5,y1    ;b=b'*2+a=b+a=e2
  1051.     subl    b,a    b,x:(r0)+        ;a=a*2-b=2*a-(b+a)=a-b=e5
  1052. ;;;    rnd    b
  1053. ;;;    rnd    a    b,x:(r0)+
  1054.     tfr    y0,a    a,x:(r1)-
  1055.  
  1056.     mac    x0,y1,a    x:(r2)+,x0    y:(r5)+n5,y0
  1057.     mac    x0,y0,a            y:(r5)+n5,y0    ;>>> 0.5
  1058.     mac    x1,y0,a    x:(r2)+,x0    y:(r5)+n5,y0
  1059.     mac    x0,y0,a    x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp3/2
  1060.     asl    a    #<18,n0        ;!;        ;a=tmp3
  1061.     mpy    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1062.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1063.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1064.     mac    x0,y0,b            y:(r5)+n5,y0    ;b'=tmp3_/2    ;;;
  1065.     addl    a,b            y:(r5)+n5,y1    ;b=b'*2+a=b+a=e3
  1066.     subl    b,a    b,x:(r0)        ;a=a*2-b=2*a-(b+a)=a-b=e4
  1067. ;;;    rnd    b
  1068. ;;;    rnd    a    b,x:(r0)
  1069.     tfr    y0,a    a,x:(r1)-
  1070.  
  1071.     sub    y1,a            y:(r5)+n5,y0
  1072.     add    y0,a            y:(r5)+n5,y0    
  1073.     sub    y0,a            y:(r5)+n5,y0    
  1074.     add    y0,a            (r5)-
  1075.     move        a,x:(r1)    y:(r5)+n5,y0
  1076.  
  1077. ;-- 3. 9pts idct/butterflies/twiddle factors for odd indices,
  1078. ;      and 36pts idct twiddle factors
  1079.     tfr    y0,a    x:(r2)+,x0    y:(r5)+n5,y1
  1080.     mac    x0,y1,a    x:(r2)+,x0    y:(r5)+n5,y0
  1081.     mac    x0,y0,a            y:(r5)+n5,y0    ;;; >>> 0.5
  1082.     mac    x1,y0,a    x:(r2)+,x0    y:(r5)+n5,y0
  1083.     mac    x0,y0,a    x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp0o/2
  1084.     asl    a    x:synth_imfct_p,r0    ;!;    ;a=tmp0o
  1085.     mpy    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1086.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1087.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1088.     mac    x0,y0,b    (r0)+n0        ;!;r0=&o0    ;b'=tmp0_o/2
  1089.     addl    a,b    n1,n0        ;!;        ;b=b'*2+a=b+a
  1090.     subl    b,a    #<9-1,n1    ;!;         ;a=a*2-b=2*a-(b+a)=a-b
  1091.     rnd    b    r0,r1        ;!;
  1092.     rnd    a    x:(r2)+,x0    b,y1
  1093.     mpyr    x0,y1,b    x:(r2)+,x0    a,y1        ;(a+b)*0.501..=o0
  1094.     mpy    x0,y1,a            b,y:(r0)+    ;;y:<o0 ;(a-b)*5.736/8
  1095.     asl    a    (r1)+n1        ;!;r1=&o7
  1096.     asl    a            y:(r5)+n5,y0    ;;; >>> 1
  1097.     asl    a            y:(r5)+n5,y1    ;;; >>> 0.5
  1098.     rnd    a    n0,n1        ;!;        ;*8=o7
  1099.     tfr    y0,a            a,y:(r1)-    ;;y:<o7
  1100.  
  1101.     mac    x1,y1,a            y:(r5)+n5,y0    ;;; >>> -0.5
  1102.     mac    -x1,y0,a        y:(r5)+n5,y0    ;;; >>> -1
  1103.     sub    y0,a            y:(r5)+n5,y0    ;;; >>> -0.5
  1104.     mac    -x1,y0,a x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp1o/2 >>> 1.73/2
  1105.     asl    a            (r5)+n5        ;a=tmp1o  >>> 0
  1106.     mpy    x0,y0,b            y:(r5)+n5,y0    ;;; >>> -1.73/2
  1107.     mac    -x0,y0,b        y:(r5)+n5,y0    ;;; >>> -1.73/2
  1108.     mac    -x0,y0,b                ;b'=tmp1_o/2
  1109.     addl    a,b    x:(r2)+,x0            ;b=b'*2+a=b+a
  1110.     subl    b,a    b,y1                ;a=a*2-b=2*a-(b+a)=a-b
  1111. ;;;    rnd    a
  1112. ;;;    rnd    b
  1113.     mpyr    x0,y1,b    x:(r2)+,x0    a,y1        ;(a+b)*0.517..=o1
  1114.     mpy    x0,y1,a            b,y:(r0)+    ;;y:<o1 ;(a-b)*1.931/2
  1115.     asl    a            y:(r5)+n5,y0    ;;; >>> 1
  1116.     rnd    a    x:(r2)+,x0    y:(r5)+n5,y1    ;*2=o6  >>> -0.34/2
  1117.     tfr    y0,a            a,y:(r1)-    ;;y:<o6
  1118.  
  1119.     mac    x0,y1,a    x:(r2)+,x0    y:(r5)+n5,y0    ;;; >>> -1.87/2
  1120.     mac    x0,y0,a            y:(r5)+n5,y0    ;;; >>> 0.5
  1121.     mac    x1,y0,a    x:(r2)+,x0    y:(r5)+n5,y0
  1122.     mac    x0,y0,a    x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp2o/2
  1123.     asl    a                    ;a=tmp2o
  1124.     mpy    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1125.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1126.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1127.     mac    x0,y0,b                    ;b'=tmp2_o/2
  1128.     addl    a,b    x:(r2)+,x0            ;b=b'*2+a=b+a
  1129.     subl    b,a    b,y1                ;a=a*2-b=2*a-(b+a)=a-b
  1130. ;;;    rnd    a
  1131. ;;;    rnd    b
  1132.     mpyr    x0,y1,b    x:(r2)+,x0    a,y1        ;(a+b)*0.551..=o2
  1133.     mpy    x0,y1,a            b,y:(r0)+    ;;y:<o2 ;(a-b)*1.183/2
  1134.     asl    a            y:(r5)+n5,y0    ;;; >>> 1
  1135.     rnd    a    x:(r2)+,x0    y:(r5)+n5,y1    ;*2=o5  >>> -1.53/2
  1136.     tfr    y0,a            a,y:(r1)-    ;;y:<o5
  1137.  
  1138.     mac    x0,y1,a    x:(r2)+,x0    y:(r5)+n5,y0    ;;; >>> 0.34/2
  1139.     mac    x0,y0,a            y:(r5)+n5,y0    ;;; >>> 0.5
  1140.     mac    x1,y0,a    x:(r2)+,x0    y:(r5)+n5,y0
  1141.     mac    x0,y0,a    x:(r2)+,x0    y:(r5)+n5,y0    ;a'=tmp3o/2
  1142.     asl    a                    ;a=tmp3o
  1143.     mpy    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1144.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1145.     mac    x0,y0,b    x:(r2)+,x0    y:(r5)+n5,y0
  1146.     mac    x0,y0,b    x:synth_imfct_p,r4    ;!;    ;b'=tmp3_o/2
  1147.     addl    a,b    x:(r2)+,x0            ;b=b'*2+a=b+a
  1148.     subl    b,a    b,y1                ;a=a*2-b=2*a-(b+a)=a-b
  1149. ;;;    rnd    a
  1150. ;;;    rnd    b
  1151.     mpyr    x0,y1,b    x:(r2)+,x0    a,y1        ;(a+b)*0.610..=o3
  1152.     mpyr    x0,y1,a            b,y:(r0)    ;;y:<o3 ;(a-b)*0.871=o4
  1153.     move                a,y:(r1)-    ;;y:<o4
  1154.     move        x:(r2)+,x0    y:(r5)+n5,y0    ;compute tmp4o
  1155.     mpy     x0,y0,a        y:(r5)+n5,y0    ;;;
  1156.     mac    -x0,y0,a        y:(r5)+n5,y0    ;;;
  1157.     mac     x0,y0,a        y:(r5)+n5,y0    ;;;
  1158.     mac    -x0,y0,a        y:(r5)+n5,y0    ;;;
  1159.     movec    m7,m5        ;restore linear addressing
  1160.     mac    x0,y0,a    #<18,n5            ;!;
  1161.     asl    a    r4,r5            ;!;
  1162.     rnd    a    r4,r0            ;!;    ;a*2=tmp4o
  1163.     move        x:(r2),r2            ;imdct_l_tab2_p
  1164.     move        x:(r5)+n5,a    a,y:(r1)    ;;y:<o3b
  1165. ;            ;!; update r5
  1166. ;-- 4. 18pts idct
  1167. ;    ;r4=tmp ;r0=e0 ;r5=o0 ;r2=first coefficient
  1168.     move         x:(r2)+,x0    y:(r5)+,y0    ;x0=-0.250.. | y0=o0
  1169.     mpy    x0,y0,a     x:(r0)+,x1
  1170.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)+,y0
  1171.     do    #8,imdct_l_tmp0_8
  1172.     mpy    x0,y0,a     x:(r0)+,x1    a,y:(r4)+
  1173.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)+,y0    ;a=tmp[1], tmp[2], ...
  1174. imdct_l_tmp0_8
  1175.     move         x:(r0)-,x1    y:(r5)-,y0    ;update r0, r5
  1176.     move                 (r5)-
  1177.     move                 y:(r5)-,y0
  1178.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1179.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[9]
  1180.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1181.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[10]
  1182.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1183.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[11]
  1184.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1185.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[12]
  1186.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1187.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[13]/2
  1188.     asl    a                     ;a=tmp[13]
  1189.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1190.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[14]
  1191.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1192.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[15]/2
  1193.     asl    a                     ;a=tmp[15]
  1194.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1195.     macr    x0,x1,a     x:(r2)+,x0    y:(r5)-,y0    ;a=tmp[16]/2
  1196.     asl    a     #<8,n5        ;!;#<8,n5    ;a=tmp[16]
  1197.     mpy    -x0,y0,a x:(r0)-,x1    a,y:(r4)+
  1198.     mac    x0,x1,a     r7,r0        ;!;&xr[sb]    ;a=tmp[17]/8
  1199.     asl    a     n7,r1        ;!;&win
  1200.     asl    a     r4,r5
  1201.     asl    a                     ;a=tmp[17]
  1202.     rnd    a     (r5)-n5    ;!;&tmp[9]
  1203.     move                 a,y:(r4)
  1204.     move         n6,r4        ;!;&prev
  1205.  
  1206. ;-- 5. shift to imdct and save final result
  1207. ;    ;r5=&tmp[9] ;r4=&prev[sb] ;r1=&win[blocktype] ;r0=&xr[sb]
  1208. ;    ;... a.k.a. ...  s[sb][0] ... t_win[type][0]  ... res[sb]
  1209.     move         x:(r1)+,x0    y:(r5)+,y0
  1210.     move                 y:(r4)+,a
  1211.     macr    -x0,y0,a         y:(r4)+,b
  1212.     jclr    #0,n2,imdct_l_even            ;even or odd subband?
  1213.     do    #4,imdct_l_odd_final
  1214.     neg    b     x:(r1)+,x0    y:(r5)+,y0    
  1215.     macr    x0,y0,b     a,x:(r0)+    y:(r4)+,a
  1216.     move         x:(r1)+,x0    y:(r5)+,y0
  1217.     macr    -x0,y0,a b,x:(r0)+    y:(r4)+,b
  1218. imdct_l_odd_final
  1219.     move    (r5)-
  1220.     do    #5,imdct_l_odd_final2
  1221.     move         x:(r1)+,x0    y:(r5)-,y0    
  1222.     macr    x0,y0,b     a,x:(r0)+    y:(r4)+,a
  1223.     neg    b     x:(r1)+,x0    y:(r5)-,y0
  1224.     macr    x0,y0,a     b,x:(r0)+    y:(r4)+,b
  1225. imdct_l_odd_final2
  1226.     jmp    imdct_l_upd_prev
  1227.  
  1228. imdct_l_even
  1229.     do    #4,imdct_l_even_final
  1230.     move         x:(r1)+,x0    y:(r5)+,y0
  1231.     macr    -x0,y0,b a,x:(r0)+    y:(r4)+,a
  1232.     move         x:(r1)+,x0    y:(r5)+,y0
  1233.     macr    -x0,y0,a b,x:(r0)+    y:(r4)+,b
  1234. imdct_l_even_final
  1235.     move    (r5)-
  1236.     do    #5,imdct_l_even_final2
  1237.     move         x:(r1)+,x0    y:(r5)-,y0    
  1238.     macr    x0,y0,b     a,x:(r0)+    y:(r4)+,a
  1239.     move         x:(r1)+,x0    y:(r5)-,y0
  1240.     macr    x0,y0,a     b,x:(r0)+    y:(r4)+,b
  1241. imdct_l_even_final2
  1242.  
  1243. ;-- 6. update 'prev' for next imdct
  1244. imdct_l_upd_prev
  1245.     move    n6,r4
  1246.     do    #9,imdct_l_upd_prev1
  1247.     mpyr    x0,y0,a    x:(r1)+,x0    y:(r5)-,y0
  1248.     move                a,y:(r4)+
  1249. imdct_l_upd_prev1
  1250.     move    (r5)+
  1251.     move    (r5)+
  1252.     move                y:(r5)+,y0
  1253.     do    #9,imdct_l_upd_prev2
  1254.     mpyr    x0,y0,a    x:(r1)+,x0    y:(r5)+,y0
  1255.     move                a,y:(r4)+
  1256. imdct_l_upd_prev2
  1257.     move    r0,r7                ;update xr pointer
  1258.     move    r4,n6                ;update prev pointer
  1259.     bchg    #0,n2                ;toggle subband (even/odd)
  1260. imdct_l_loop0
  1261.  
  1262.  
  1263.  
  1264. ;    ;n1=lim ;r7=xr(in/out) ;n6=prev ;n2=sb&1
  1265.  
  1266. ;****** IMDCT for SHORT bands
  1267.     move    n1,x0            ;lim
  1268.     move    #>32,a
  1269.     sub    x0,a    r7,n7        ;n7=xr                !! n7
  1270.     jle    imdct_s_loop0        ;--> skip  ( because lim>=32 )
  1271.  
  1272.     do    a,imdct_s_loop0
  1273. ;-- 1. clear the out table
  1274.     clr    a    x:synth_imfct_p,r0
  1275.     move    #<36-6,n0
  1276.     rep    #36
  1277.     move    a,y:(r0)+
  1278.     lua    (r0)-n0,r6        ;r6=&out[6]
  1279.     move    #<40-36,n0
  1280.     move    n7,r1            ;r1=xr (input)
  1281.     move    #<3,n1
  1282.     lua    (r0)+n0,r5        ;r5=&in[0] (align 8!!)
  1283.     movec    #<6-1,m5        ;(modulo-6 addressing)
  1284.  
  1285.     do    #3,imdct_s_next        ;three imdct to do
  1286. ;-- 2. input aliasing for 36/18 pts idct
  1287.     move        x:(r1)+n1,a
  1288.     move        x:(r1)+n1,x0    a,y0
  1289.     add    x0,a    x:(r1)+n1,x0    a,y:(r5)+
  1290.     sub    y0,a    x:(r1)+n1,x1    a,y:(r5)+
  1291.     add    x0,a    x0,y1
  1292.     add    y0,a    x:(r1)+n1,x0    a,y:(r5)+
  1293.     add    x1,a    x1,b
  1294.     add    x0,b    x:(r1)+n1,x1    a,y:(r5)+
  1295.     add    y1,b            b,y:(r5)+
  1296.     add    x1,b    #<2,n5
  1297.     move                b,y:(r5)+
  1298.  
  1299.     movec    #<6-1,m4        ;(modulo-6 addressing)
  1300.     move    r5,r4            ;r4=odd adresses...
  1301.     move    #<2,n4
  1302.     move    (r4)+
  1303.     move    #>imdct_s_tab,r2    ;r2=imdct coefficients
  1304.     move    #<5,n3            ;!;
  1305.     move    r6,r3            ;!;
  1306.  
  1307. ;-- 3. 3pts/6pts idct with twiddle factor for odd indices,
  1308. ;      and output butterflies for 2*3 pts = 6 pts idct
  1309.     move                y:(r4)+n4,y0
  1310.     tfr    y0,b    x:(r2)+,x1    y:(r4)+n4,y1    ;>>> 0.866
  1311.     mac    x1,y1,b    x:(r2)+,x0    y:(r4)+n4,y0    ;>>> 0.5
  1312.     macr    x0,y0,b            y:(r5)+n5,y0
  1313.     tfr    y0,a            y:(r5)+n5,y0
  1314.     mac    x1,y0,a            y:(r5)+n5,y0
  1315.     mac    x0,y0,a    x:(r2)+,x0    b,y0        ;>>> 0.517
  1316.     mpy    x0,y0,b            y:(r4)+n4,y0
  1317.     add    a,b            (r4)+n4        ;>>> 0
  1318.     subl    b,a    r6,r0        ;!;&tmp0b
  1319.     rnd    b    (r3)+n3        ;!;&tmp5b
  1320.     rnd    a    b,x:(r0)+    ;!;y:<tmp0b
  1321.     tfr    y0,b    a,x:(r3)-    ;!;y:<tmp5b
  1322.     move                y:(r4)+n4,y0    ;>>> -1
  1323.     sub    y0,b            y:(r5)+n5,y0
  1324.     tfr    y0,a            (r5)+n5
  1325.     move                y:(r5)+n5,y0
  1326.     sub    y0,a    x:(r2)+,x0    b,y0        ;>>> 0.707
  1327.     mpy    x0,y0,b            y:(r4)+n4,y0
  1328.     add    a,b            y:(r4)+n4,y1    ;>>> -0.866
  1329.     subl    b,a    #<18-1,n1
  1330.     rnd    b    #<2,n0        ;!;
  1331.     rnd    a    b,x:(r0)+    ;!;y:<tmp1b
  1332.     tfr    y0,b    a,x:(r3)    ;!;y:<tmp4b
  1333.     mac    -x1,y1,b x:(r2)+,x0    y:(r4)+n4,y0    ;>>> 0.5
  1334.     macr    x0,y0,b            y:(r5)+n5,y0
  1335.     tfr    y0,a            y:(r5)+n5,y0
  1336.     mac    -x1,y0,a         y:(r5)+n5,y0
  1337.     mac    x0,y0,a    x:(r2)+,x0    b,y0        ;>>> 1.93/2
  1338.     mpy    x0,y0,b    x:(r3)+,y0    ;!;y:<tmp4b
  1339.     addl    a,b    #<5,n4
  1340.     subl    b,a    r6,r4        ;x:<out_adr
  1341.     move        r6,r7
  1342.     movec    m7,m4            ;(linear addressing)
  1343.     rnd    b    x:(r3)-,y1    ;!;y:<tmp5b
  1344.     rnd    a    b,x:(r0)-n0    ;!;y:<tmp2b
  1345.     move        x:(r2),r2            ;imdct_s_tab2_p
  1346.     move        a,x0        ;!;y:<tmp3b
  1347.  
  1348. ;-- 4. twiddle factors, shift to 12pts imdct and multiply by window type 2
  1349. ;    ;r4=&out[ss+6]; n4=-2 ;r2=first coefficient
  1350.     move        x:(r2)+,x1    y:(r4)+,a
  1351.     macr    x1,x0,a    x:(r2)+,x1    y:(r4)+,b
  1352.     move                a,y:(r7)+    ;;;(r4+n4)
  1353.     macr    x1,y0,b    x:(r2)+,x1    y:(r4)+,y0
  1354.     mpyr    x1,y1,a            b,y:(r7)+    ;;;(r4+n4)
  1355.     asl    a    (r1)-n1
  1356.     asl    a    #<3,n1
  1357.     add    y0,a    x:(r2)+,x1    y:(r4)+,y0
  1358.     mpyr    x1,y1,b            a,y:(r7)+    ;;;(r4+n4)
  1359.     asl    b    
  1360.     asl    b    x:(r2)+,x1    y:(r4)+,y1
  1361.     add    y0,b    x:(r3),y0            ;!;y:<tmp4b
  1362.     mpyr    x1,y0,a            b,y:(r7)+    ;;;(r4+n4)
  1363.     asl    a    x:(r2)+,x1    y:(r4)+,b
  1364.     add    y1,a    x:(r0)+,y1            ;!;y:<tmp0b
  1365.     macr    x1,x0,b            a,y:(r7)+    ;;;(r4+n4)
  1366.     move        x:(r2)+,x1    y:(r4)+,a
  1367.     move        x:(r0)+,y0            ;!;y:<tmp1b
  1368.     move        x:(r0),x0            ;!;y:<tmp2b
  1369.     macr    x1,x0,a            b,y:(r7)+    ;;;(r4+n4)
  1370.     move        x:(r2)+,x1    y:(r4)+,b
  1371.     macr    x1,y0,b            a,y:(r7)+    ;;;(r4+n4)
  1372.     move        x:(r2)+,x1    y:(r4)+,a
  1373.     macr    x1,y1,a            b,y:(r7)+    ;;;(r4+n4)
  1374.     move        x:(r2)+,x1    y:(r4)+,b
  1375.     macr    x1,y1,b            a,y:(r7)+    ;;;(r4+n4)
  1376.     move        x:(r2)+,x1    y:(r4)+,a
  1377.     macr    x1,y0,a            b,y:(r7)+    ;;;(r4+n4)
  1378.     move        x:(r2)+,x1    y:(r4)-,b
  1379.     macr    x1,x0,b            a,y:(r4)+
  1380.     move                b,y:(r4)-n4
  1381.     move    r4,r6
  1382. imdct_s_next
  1383.  
  1384. ;-- 5- compute final result for polyphase filter
  1385.     movec    m7,m5            ;(linear addressing)
  1386.     move    n7,r0            ;r0=x:xr[sb]
  1387.     move    x:synth_imfct_p,r5    ;r5=y:out[0]
  1388.     move    n6,r4            ;r4=y:prev[sb][0]
  1389.     move                y:(r5)+,y0
  1390.     jclr    #0,n2,imdct_s_even    ;even or odd subband?
  1391.     move                y:(r4)+,b
  1392.     add    y0,b            y:(r4)+,a
  1393.     move        b,x:(r0)+    y:(r5)+,y1
  1394.     add    y1,a            y:(r4)+,b
  1395.     neg    a            y:(r5)+,y0
  1396.     do    #8,imdct_s_odd_final
  1397.     add    y0,b    a,x:(r0)+    y:(r4)+,a
  1398.     move        b,x:(r0)+    y:(r5)+,y1
  1399.     add    y1,a            y:(r4)+,b
  1400.     neg    a            y:(r5)+,y0
  1401. imdct_s_odd_final
  1402.     move        a,x:(r0)+    y:(r5)-,y0
  1403.     move    n6,r4
  1404.     do    #18,imdct_s_upd_prev
  1405.     move                y:(r5)+,y0
  1406.     move                y0,y:(r4)+
  1407. imdct_s_upd_prev
  1408.     jmp    imdct_s_even_final
  1409. imdct_s_even
  1410.     move    #<17,n5
  1411.     move                y:(r4),b
  1412.     do    #18,imdct_s_even_final
  1413.     add    y0,b            y:(r5+n5),y0
  1414.     move        b,x:(r0)+    y0,y:(r4)+
  1415.     move                y:(r4),b
  1416.     move                y:(r5)+,y0
  1417. imdct_s_even_final
  1418.     move    r0,n7                ;update xr pointer
  1419.     move    r4,n6                ;update prev pointer
  1420.     bchg    #0,n2                ;toggle subband (even/odd)
  1421. imdct_s_loop0
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430. ;*****************************************************************************
  1431. ;*** synthesis (polyphase filter)
  1432. ;*****************************************************************************
  1433.     move    x:outbuf,r1
  1434.     move    r1,x:synth_out_p
  1435.     move    x:xr_p,r0
  1436.     move    #<$02,a            ;1<<17 = %00000010.00000000.00000000
  1437.  
  1438. synth_loop18_head
  1439.     move    a,x:synth_count18
  1440.     move    r0,x:synth_in_p
  1441.     move    x:synth_imfct_p,n7        ;            !! n7
  1442.  
  1443. ;    ** first butterfly pass
  1444.     move    #<18,n0
  1445.     move    n7,r1                ;x:synth_imfct_p
  1446.     move    n7,r5
  1447.     move    #0.70710678,y0            ;cos(pi/4)
  1448.     move            x:(r0)+n0,x0
  1449.     do    #8,synth_bfy1
  1450.     mpyr     x0,y0,a    x:(r0)+n0,x0
  1451.     mpyr    -x0,y0,a    a,x:(r1)+    a,y:(r5)+
  1452.     move            a,x:(r1)+
  1453.     mpyr     x0,y0,a    x:(r0)+n0,x0
  1454.     mpyr    -x0,y0,a    x:(r0)+n0,x0    a,y:(r5)+
  1455.     mpyr     x0,y0,a    a,x:(r1)+    a,y:(r5)+
  1456.     mpyr    -x0,y0,a    a,x:(r1)+
  1457.     move            x:(r0)+n0,x0    a,y:(r5)+
  1458. synth_bfy1
  1459.  
  1460. ;    ** second butterfly pass
  1461.     move    n7,a                ;x:synth_imfct_p
  1462.     move    #>16,x0
  1463.     add    x0,a    a,r0
  1464.     add    x0,a    a,r4
  1465.     add    x0,a    a,r6
  1466.     move        a,r5
  1467.     lua    (r0)+,r7
  1468.     move            x:(r0),b    y:(r4),y0
  1469.     do    #16,synth_bfy2
  1470.     add    y0,b        x:(r4),x1    y:(r0),a
  1471.     sub    x1,a        b,x:(r5)    y:(r0),b
  1472.     add    x1,b        x:(r0),a    a,y:(r5)+
  1473.     sub    y0,a        x:(r0),b    b,y:(r6)
  1474.     sub    x1,b        a,x:(r6)+    y:(r0),a
  1475.     sub    y0,a        b,x:(r4)    y:(r0),b
  1476.     add    y0,b        x:(r0),a    a,y:(r4)+
  1477.     add    x1,a        x:(r7)+,b    b,y:(r0)    ;!b
  1478.     move            a,x:(r0)+    y:(r4),y0    ;!y0
  1479. synth_bfy2
  1480.  
  1481.     ori    #$08,mr                ;SCALE UP mode
  1482. ;this nice feature allows us to automatically scale up the samples during
  1483. ;the next processing steps, so we can save the ASL's in the final loop which
  1484. ;writes PCM samples to the output buffer (we need to shift left by 6 bits)
  1485.  
  1486.  
  1487. ;    ** perform the rest of the butterfly passes
  1488.     move    x:synth_tab_rsincosx_p,n6    ;x:synth_tab_rsincosx_p    !! n6
  1489.     move    n7,r0                ;x:synth_imfct_p
  1490.     movec    #<64-1,m0            ;modulo-64 addressing
  1491.     movec    #<64-1,m4            ;modulo-64 addressing
  1492.  
  1493. ;    ** pass 3  - SCALE UP (1/6)
  1494.     move    n6,r6                ;x:synth_tab_rsincosx_p
  1495.     move    #<8,n0
  1496.     move    #<8,n4
  1497.     move    r0,r4
  1498.     do    #4,synth_grp3
  1499.     lua    (r0)+n0,r5
  1500.     move    r5,r2
  1501.     move            x:(r6),x0
  1502.     move            x:(r0),b    y:(r5),y1
  1503.     mac    -x0,y1,b    x:(r2)+,x1    y:(r6)+,y0
  1504.     do    #8,synth_bfy3
  1505.     macr    y0,x1,b        x:(r0),a
  1506.     subl    b,a        b,x:(r0)    y:(r4)+,b
  1507.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1
  1508.     macr    x0,x1,b                y:(r0),a
  1509.     subl    b,a        x:(r4),b    b,y:(r0)+
  1510.     mac    -x0,y1,b    x:(r2)+,x1    a,y:(r5)+
  1511. synth_bfy3
  1512.     move            x:(r0)+n0,x0    y:(r4)+n4,y0    ;update r0, r4
  1513. synth_grp3
  1514.  
  1515.     movec    #<64-1,m2            ;modulo-64 addressing
  1516.     movec    #<64-1,m5            ;modulo-64 addressing
  1517.  
  1518. ;    ** pass 4  - SCALE UP (2/6)
  1519.     move    n6,r6                ;x:synth_tab_rsincosx_p
  1520.     move    #<4+0,n0
  1521.     move    #<4+1,n2
  1522.     move    #<4+1,n4
  1523.     move    #<4+1,n5
  1524.     lua    (r0)+n0,r5
  1525.     move    r5,r2
  1526.     move            x:(r6),x0
  1527.     move            x:(r0),b    y:(r5),y1
  1528.     do    #8,synth_grp4
  1529.     mac    -x0,y1,b    x:(r2)+,x1    y:(r6)+,y0
  1530.     macr    y0,x1,b        x:(r0),a
  1531.     subl    b,a        b,x:(r0)    y:(r4)+,b
  1532.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1
  1533.     macr    x0,x1,b                y:(r0),a
  1534.     subl    b,a        x:(r4),b    b,y:(r0)+
  1535.     mac    -x0,y1,b    x:(r2)+,x1    a,y:(r5)+
  1536.     macr    y0,x1,b        x:(r0),a
  1537.     subl    b,a        b,x:(r0)    y:(r4)+,b
  1538.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1
  1539.     macr    x0,x1,b                y:(r0),a
  1540.     subl    b,a        x:(r4),b    b,y:(r0)+
  1541.     mac    -x0,y1,b    x:(r2)+,x1    a,y:(r5)+
  1542.     macr    y0,x1,b        x:(r0),a
  1543.     subl    b,a        b,x:(r0)    y:(r4)+,b
  1544.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1
  1545.     macr    x0,x1,b                y:(r0),a
  1546.     subl    b,a        x:(r4),b    b,y:(r0)+
  1547.     mac    -x0,y1,b    x:(r2)+n2,x1    a,y:(r5)+    ;update r2
  1548.     macr    y0,x1,b        x:(r0),a
  1549.     subl    b,a        b,x:(r0)    y:(r4)+n4,b    ;update r4
  1550.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1    ;!y1
  1551.     macr    x0,x1,b        x:(r6),x0    y:(r0),a    ;!x0
  1552.     subl    b,a        x:(r4),b    b,y:(r0)+    ;!b
  1553.     move            x:(r0)+n0,a    a,y:(r5)+n5    ;update r0, r5
  1554. synth_grp4
  1555.  
  1556. ;    ** pass 5  - SCALE UP (3/6)
  1557.     move    n6,r6                ;x:synth_tab_rsincosx_p
  1558.     move    #<2+0,n0
  1559.     move    #<2+1,n2
  1560.     move    #<2+1,n4
  1561.     move    #<2+1,n5
  1562.     lua    (r0)+n0,r5
  1563.     move    r5,r2
  1564.     move            x:(r6),x0
  1565.     move            x:(r0),b    y:(r5),y1
  1566.     do    #16,synth_grp5
  1567.     mac    -x0,y1,b    x:(r2)+,x1    y:(r6)+,y0
  1568.     macr    y0,x1,b        x:(r0),a
  1569.     subl    b,a        b,x:(r0)    y:(r4)+,b
  1570.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1
  1571.     macr    x0,x1,b                y:(r0),a
  1572.     subl    b,a        x:(r4),b    b,y:(r0)+
  1573.     mac    -x0,y1,b    x:(r2)+n2,x1    a,y:(r5)+    ;update r2
  1574.     macr    y0,x1,b        x:(r0),a
  1575.     subl    b,a        b,x:(r0)    y:(r4)+n4,b    ;update r4
  1576.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1    ;!y1
  1577.     macr    x0,x1,b        x:(r6),x0    y:(r0),a    ;!x0
  1578.     subl    b,a        x:(r4),b    b,y:(r0)+    ;!b
  1579.     move            x:(r0)+n0,a    a,y:(r5)+n5    ;update r0, r5
  1580. synth_grp5
  1581.  
  1582. ;    ** pass 6  - SCALE UP (4/6)
  1583.     move    n6,r6                ;x:synth_tab_rsincosx_p
  1584.     move    #<1+1,n2
  1585.     move    #<1+1,n4
  1586.     move    #<1+1,n5
  1587.     lua    (r0)+,r5
  1588.     move    r5,r2
  1589.     move            x:(r6),x0
  1590.     move            x:(r0),b    y:(r5),y1
  1591.     do    #32,synth_grp6
  1592.     mac    -x0,y1,b    x:(r2)+n2,x1    y:(r6)+,y0    ;update r2
  1593.     macr    y0,x1,b        x:(r0),a
  1594.     subl    b,a        b,x:(r0)    y:(r4)+n4,b    ;update r4
  1595.     mac    y0,y1,b        a,x:(r5)    y:(r2),y1    ;!y1
  1596.     macr    x0,x1,b        x:(r6),x0    y:(r0),a    ;!x0
  1597.     subl    b,a        x:(r4),b    b,y:(r0)+    ;!b
  1598.     move            x:(r0)+,a    a,y:(r5)+n5    ;update r0, r5
  1599. synth_grp6
  1600.  
  1601.     movec    m7,m2                ;linear addressing
  1602.     movec    m7,m4                ;linear addressing
  1603.     movec    m7,m5                ;linear addressing
  1604.  
  1605. ;    ** unscrambling and final adjustments  - SCALE UP (5/6)
  1606.     move    x:synth_audio_pp,r5
  1607.     move    #>synth_tab_cosx,r4
  1608.     move    #>synth_tab_sinx,r6
  1609.     move    x:(r5),r5
  1610.     movec    #<0,m0                ;bit-reverse addressing
  1611.     move    #<32,n0
  1612.     move            x:(r0),x1    y:(r4)+,y1
  1613.     mpy    y1,x1,a                y:(r6)+,y0
  1614.     move                    y:(r0)+n0,y1
  1615.     macr    -y0,y1,a    x:(r0),x1    y:(r4)+,y1
  1616.     move                    y:(r6)+,y0
  1617. synth_unscramble_start
  1618. ;------    move    #synth_unscramble,r7
  1619. ;------    jmp    <synth_unscramble_start
  1620.     do    #64-1,synth_unscramble
  1621.     mpy    y1,x1,a        a,x:(r5)+    y:(r0)+n0,y1
  1622.     macr    -y0,y1,a    x:(r0),x1    y:(r4)+,y1
  1623.     move                    y:(r6)+,y0
  1624. synth_unscramble
  1625. ;------    5+1 words, return: jmp (r7)
  1626.     move            a,x:(r5)+
  1627.  
  1628. ;    ** window audio data - output PCM samples  - SCALE UP (6/6)
  1629.     move    x:synth_out_p,r6
  1630.     move    x:channel_counter,b
  1631.     move    x:channels,x0
  1632.     sub    x0,b    n7,r5            ;x:synth_imfct_p
  1633.     teq    b,a    r6,r5            ;outbuf (x:-mem, left ch.)
  1634.  
  1635.     move    x:synth_audio_pp,r0
  1636.     movec    #1024-1,m0            ;modulo addressing
  1637.     movec    m0,m1                ;modulo addressing
  1638.     move    x:(r0),r0
  1639.     move    #<96,n0
  1640.     move    #>synth_tab_window,r4
  1641.     lua    (r0)+n0,r1
  1642.     move    x:synth_window_p,r3
  1643.     move    #<128,n0
  1644.     move    #<128,n1
  1645.     jsr    (r3)                ;write to left channel (or tmp)
  1646.  
  1647.     andi    #$f3,mr                ;NO SCALING mode
  1648.  
  1649.     tst    b    n7,r3            ;x:synth_imfct_p
  1650.     jeq    synth_out_done
  1651.     move    r6,r5                ;outbuf (y:-mem, right ch.)
  1652.     move    x:(r3)+,a
  1653.     rep    #32                ;(copy from tmp)
  1654.     move    x:(r3)+,a    a,y:(r5)+    ;write to right channel
  1655. synth_out_done
  1656.     move    r5,x:synth_out_p
  1657.  
  1658. ;    ** update audio buffer pointer
  1659.     move    x:synth_audio_pp,r1
  1660.     move    #<64,n0
  1661.     move    x:(r1),r0
  1662.     movec    m7,m1                ;linear addressing
  1663.     move    (r0)-n0
  1664.     movec    m7,m0                ;linear addressing
  1665.     move    r0,x:(r1)
  1666.  
  1667. ;    ** loop 18 times
  1668.     move    x:synth_in_p,r0
  1669.     move    x:synth_count18,a
  1670.     lsr    a    (r0)+
  1671.     jne    synth_loop18_head
  1672.  
  1673.  
  1674.  
  1675.     move    x:si_tab_p,r0
  1676.     move    #>xr1,r1
  1677.     move    #>hybrid_prev1,r2
  1678.     move    #>synth_audio_r_p,r3
  1679.     move    #<0,x0
  1680.     move    y:forcemono,b
  1681.     tst    b    x:channel_counter,a
  1682.     tne    x0,a
  1683.     lsr    a    (r0)+
  1684.     jne    hybrid_synth_channel_loop    ;next channel
  1685.  
  1686. ;****** for(ch=0;ch<stereo;ch++)    ;end************************
  1687.  
  1688.  
  1689.     move    x:outbuf,r1
  1690.     move    #576,n1
  1691.     move    #>si_tab+2,r0
  1692.     move    #>granule1_sfsi,n0
  1693.     move    (r1)+n1
  1694.     move    x:granule_counter,a
  1695.     tst    a    #<1,a
  1696.     jeq    decode_granule_loop    ;decode second granule
  1697.  
  1698. ;****** for(gr=0;gr<ngr;gr++)        ;end************************
  1699.  
  1700.  
  1701.  
  1702.  
  1703. ;    do    #500,overload0
  1704. ;    do    #1000,overload1
  1705. ;    nop
  1706. ;overload1
  1707. ;    nop
  1708. ;overload0
  1709.  
  1710.     move    #<0,x0
  1711.     move    x0,y:busy        ;clear BUSY
  1712.     rts                ;it's done.
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.  
  1721.  
  1722.  
  1723. synth_window_start
  1724.     do    #32,synth_window
  1725.     move            x:(r0)+n0,x0    y:(r4)+,y0
  1726.     mpy    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1727.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1728.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1729.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1730.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1731.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1732.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1733.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1734.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1735.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1736.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1737.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1738.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1739.     mac    x0,y0,a        x:(r0)+n0,x0    y:(r4)+,y0
  1740.     mac    x0,y0,a        x:(r1)+n1,x0    y:(r4)+,y0
  1741.     macr    x0,y0,a        (r0)+
  1742.     move            a,x:(r5)+    y:(r1)+,a    ;update r1
  1743. synth_window
  1744.     rts
  1745. synth_window_end
  1746. ;        ** 21 words
  1747.  
  1748.  
  1749. getbits_init
  1750.     clr    b    r7,x:getbits_stream
  1751.     move    b,x:getbits_count
  1752.     move    #<$80,b            ;end marker
  1753.     move    b,x:getbits_temp
  1754. getbits_continue
  1755.     move    x:getbits_p,r5        ;getbits(n7) -> jsr (r5)
  1756.     clr    b    x:getbit1_p,r6    ;getbit1()   -> jsr (r6)
  1757.     move    x:getbits_stream,r7    ;!! DO NOT TOUCH !!
  1758.     move    x:getbits_temp,b1    ;!! DO NOT TOUCH !!
  1759.     move    x:getbits_count,b0    ;!! DO NOT TOUCH !!
  1760.     rts
  1761.  
  1762. getbits_pause
  1763.     move    r7,x:getbits_stream
  1764.     move    b1,x:getbits_temp
  1765.     move    b0,x:getbits_count
  1766.     rts
  1767.  
  1768. getbits__
  1769.     do    n7,getbits_loop        ;n7=number_of_bits
  1770.     inc    b            ;b0=b0+1  (increment bit counter)
  1771.     lsl    b            ;b1=b1<<1 (new CARRY bit)
  1772.     jne    getbits_ne
  1773.     move    x:(r7)+,b1        ;fetch next 24 bits
  1774.     rol    b            ;b1=b1<<1, append end marker
  1775. getbits_ne
  1776.     rol    a            ;get CARRY bit, set condition code ZERO
  1777. getbits_loop
  1778.     rts
  1779.  
  1780. getbit1__
  1781.     inc    b            ;b0=b0+1  (increment bit counter)
  1782.     lsl    b    #<0,a        ;b1=b1<<1 (new CARRY bit)
  1783.     jne    getbit1_ne
  1784.     move    x:(r7)+,b1        ;fetch next 24 bits
  1785.     rol    b            ;b1=b1<<1, append end marker
  1786. getbit1_ne
  1787.     rol    a            ;get CARRY bit, set condition code ZERO
  1788.     rts
  1789.  
  1790.  
  1791.  
  1792.  
  1793.  
  1794.  
  1795.  
  1796.  
  1797.  
  1798.  
  1799.  
  1800.  
  1801. ;*****************************************************************************
  1802. ;*** initialize
  1803. ;*****************************************************************************
  1804. ; parameters
  1805. ;  x1 - mem_mp3 (64+32+30=126 words in INTERNAL L-memory)
  1806. ;  x0 - mem_mp3p (21+6=27 words in INTERNAL P-memory)
  1807. ;  y1 - freq_idx (0, 1 or 2 - extracted from frame header)
  1808. ;  y0 - mem_x_mp3_ro (3*576 words in X-memory, allocated by main program)
  1809. init
  1810.     move    y0,r7
  1811.  
  1812. ;********* hybrid filter + synthesis: fast L-data buffer
  1813. ;********* (64 words - major speedup!!)
  1814.     tfr    x1,a        #>64,x1
  1815.     tst    a        #>synth_tab_rsinxrcosx,r0
  1816.     jeq    init_no_lmem
  1817.     add    x1,a        a,x:synth_imfct_p
  1818.  
  1819. ;********* synthesis: rsinx_rcosx table to fast L-data memory
  1820. ;********* (32 words - little speedup)
  1821.     move    a,x:synth_tab_rsincosx_p
  1822.     move    a,r4
  1823.     move    x:(r0),a
  1824.     do    #32,init_loop_l0
  1825.     move    a,x:(r4)    y:(r0)+,a
  1826.     move    x:(r0),a    a,y:(r4)+
  1827. init_loop_l0
  1828.  
  1829. ;********* hybrid filter: imdct_l_tab2 to fast X-data memory
  1830. ;********* (18 words - tiny speedup)
  1831.     move    #>imdct_l_tab2_p,r0
  1832.     move    r4,r1            ;r1=32 words fast Y-mem pointer
  1833.     move    r4,x:(r0)+
  1834.     move    #>imdct_s_tab2_p,r2    ;next...
  1835.     do    #18,init_loop_l1
  1836.     move    x:(r0)+,a
  1837.     move    a,x:(r4)+
  1838. init_loop_l1
  1839.  
  1840. ;********* hybrid filter: imdct_s_tab2 to fast X-data memory
  1841. ;********* (12 words - tiny speedup)
  1842.     move    r4,x:(r2)+
  1843.     move    #>cs_ca_tab_p,r0    ;next...
  1844.     do    #12,init_loop_l2
  1845.     move    x:(r2)+,a
  1846.     move    a,x:(r4)+
  1847. init_loop_l2
  1848.  
  1849. ;********* hybrid filter: cs_ca_tab to fast Y-data memory
  1850. ;********* (16 words - tiny speedup)
  1851.     move    x:(r0),r2
  1852.     move    r1,x:(r0)
  1853.     do    #16,init_loop_l3    ;14 words Y-mem remain unused...
  1854.     move    y:(r2)+,a
  1855.     move    a,y:(r1)+
  1856. init_loop_l3
  1857.  
  1858.  
  1859.  
  1860. init_no_lmem
  1861.     tfr    x0,a        #synth_window_start,r0
  1862.     tst    a        x0,r1
  1863.     jeq    init_no_pmem
  1864.  
  1865. ;********* synthesis: window loop to fast program memory
  1866. ;********* (21 words - major speedup!!)
  1867.     move    x0,x:synth_window_p
  1868.     lua    (r1)+,r2
  1869.     do    #synth_window_end-synth_window_start,init_loop_p0
  1870.     movem    p:(r0)+,x1
  1871.     movem    x1,p:(r1)+
  1872. init_loop_p0
  1873.     tfr    x0,a        #>synth_window-synth_window_start-1,x0
  1874.     add    x0,a        #>synth_unscramble_start,r0
  1875.     movem    a,p:(r2)
  1876.  
  1877. ;********* synthesis: unscramble loop to fast program memory
  1878. ;********* (6 words - tiny speedup)
  1879.     move    r1,a
  1880.     tfr    a,b        r0,r2
  1881.     movem    p:(r0)+,x1
  1882.     movem    x1,p:(r1)+        ;copy first word of 'do'
  1883.     move    #>synth_unscramble-synth_unscramble_start-1,x0
  1884.     add    x0,a        (r0)+
  1885.     movem    a,p:(r1)+        ;second word of 'do' (absolute address)
  1886.     do    #synth_unscramble-synth_unscramble_start-2,init_loop_p1
  1887.     movem    p:(r0)+,x1
  1888.     movem    x1,p:(r1)+        ;copy the rest
  1889. init_loop_p1
  1890.     move    #>synth_unscramble_help,r3
  1891.     move    #>$0c0000,y0        ;short jump 'jmp xxx'
  1892.     movem    p:(r3)+,x1
  1893.     movem    x1,p:(r1)+        ;copy 'jmp (r7)'
  1894.     movem    p:(r3)+,x1
  1895.     movem    x1,p:(r2)+
  1896.     movem    p:(r3),x1
  1897.     movem    x1,p:(r2)+        ;copy 'move #synth_unscramble,r7'
  1898.     or    y0,b
  1899.     movem    b,p:(r2)        ;short jump 'jmp <synth_unscramble_start'
  1900.  
  1901.  
  1902.  
  1903.  
  1904.  
  1905. init_no_pmem
  1906. ;****** select scalefactor_band tables (using freq_idx)
  1907.     move    y1,n0            ;freq_idx
  1908.     move    #>sfbands_tab,r0
  1909.     nop
  1910.     move    x:(r0+n0),a
  1911.     move    #>sfbandl_tab,r0
  1912.     move    a,x:sfbands_p
  1913.     move    a,r1
  1914.     move    x:(r0+n0),a
  1915.     move    a,x:sfbandl_p
  1916.  
  1917. ;****** prepare reorder tables
  1918. ; ro0 - no reordering  (blocktype!=2)
  1919.     move    r7,x:ro0_p
  1920.     clr    a    #>1,x0
  1921.     rep    #576
  1922.     add    x0,a    a,x:(r7)+
  1923.  
  1924. ; ro1 - full reordering  (blocktype==2 && !mixedblock)
  1925.     move    r7,x:ro1_p
  1926.     move    x:(r1)+,y0        ;x:sfbands_p
  1927.     do    #13,init_ro1
  1928.     move    x:(r1)+,a
  1929.     move    a,y1
  1930.     sub    y0,a    #>3,x0
  1931.     move    a,x1
  1932.     jsr    <delf_div
  1933.     rnd    a    #>3,x0
  1934.     tfr    y0,a    a,x1
  1935.     rep    x1
  1936.     add    x0,a    a,x:(r7)+
  1937.     tfr    y0,a    #>1,b
  1938.     add    b,a
  1939.     rep    x1
  1940.     add    x0,a    a,x:(r7)+
  1941.     tfr    y0,a    #>2,b
  1942.     add    b,a    y1,y0
  1943.     rep    x1
  1944.     add    x0,a    a,x:(r7)+
  1945. init_ro1
  1946.  
  1947. ; ro2 - partial reordering  (blocktype==2 && mixedblock)
  1948.     move    r7,x:ro2_p
  1949.     move    x:ro1_p,r1
  1950.     move    #<36,n1
  1951.     clr    a    #>1,x0
  1952.     rep    #36
  1953.     add    x0,a    a,x:(r7)+
  1954.     move    (r1)+n1
  1955.     do    #576-36,init_ro2
  1956.     move    x:(r1)+,a
  1957.     move    a,x:(r7)+
  1958. init_ro2
  1959.  
  1960.     move    #<0,x0
  1961.     rts
  1962.  
  1963.  
  1964.  
  1965. synth_unscramble_help
  1966.     jmp    (r7)
  1967.     move    #synth_unscramble,r7
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.     org    x:
  1981.     align    1024
  1982. synth_audio
  1983.     ds    2048
  1984.  
  1985. ;->xdata+2048
  1986. inbuf
  1987.     ds    662    ;(33+512+1440)/3
  1988.  
  1989. ;->xdata+2710
  1990. quantab_p    ds    1    ;comes from main prog (see 'MP3_quantab.h')
  1991.  
  1992.  
  1993. ;    dc    "***xr0***"
  1994. xr0        ds    576
  1995. ;    dc    "***xr1***"
  1996.         dc    1,1,1    ;safety (for intensity-stereo)
  1997. xr1        ds    576
  1998. ;    dc    "***xr.***"
  1999. xr_p        ds    1
  2000.  
  2001.  
  2002.  
  2003. ;    dc    "***getbit***"
  2004. getbits_p        dc    getbits__
  2005. getbit1_p        dc    getbit1__
  2006. getbits_stream        ds    1
  2007. getbits_temp        ds    1
  2008. getbits_count        ds    1
  2009.  
  2010. mono            ds    1
  2011. channels        ds    1
  2012. modext            ds    1
  2013.  
  2014.  
  2015. sfsi_p        ds    1
  2016. granule0_sfsi    ds    4*2    ;always zero
  2017. ;    dc    "***sfsi01***"
  2018. granule1_sfsi    ds    4*2    ;4 values for each channel
  2019.  
  2020. si_granule_tab_p    ds    1
  2021. si_tab_p        ds    1
  2022. si_tab        dc    si0,si1,si2,si3
  2023.  
  2024. ;    dc    "***si0***"
  2025. si0
  2026. grstart        ds    1
  2027. grend        ds    1
  2028. regionend2    ds    1
  2029. globalgain    ds    1
  2030. sfcompress    ds    1
  2031. blocktype    ds    1
  2032. mixedblock    ds    1
  2033. tabsel0        ds    1
  2034. tabsel1        ds    1
  2035. tabsel2        ds    1
  2036. subblockgain0    ds    1
  2037. subblockgain1    ds    1
  2038. subblockgain2    ds    1
  2039. regionend0    ds    1
  2040. regionend1    ds    1
  2041. preflag        ds    1
  2042. sfshift        ds    1
  2043. tabsel3        ds    1
  2044. ;    dc    "***si1***"
  2045. si1        ds    18
  2046. ;    dc    "***si2***"
  2047. si2        ds    18
  2048. ;    dc    "***si3***"
  2049. si3        ds    18
  2050. ;    dc    "***si.***"
  2051.  
  2052. granule_counter    ds    1
  2053. channel_counter    ds    1
  2054.  
  2055. outbuf        ds    1
  2056.  
  2057. scalefac_p    ds    1
  2058. ;    dc    "***sf0***"
  2059. scalefac0    ds    39
  2060. ;    dc    "***sf1***"
  2061. scalefac1    ds    39
  2062. ;    dc    "***sf.***"
  2063.  
  2064.  
  2065. ro0_p        ds    1
  2066. ro1_p        ds    1
  2067. ro2_p        ds    1
  2068. prev_p        ds    1
  2069.  
  2070. synth_in_p        ds    1
  2071. synth_out_p        ds    1
  2072. ;    dc    "**synth**"
  2073. synth_audio_l_p        dc    synth_audio
  2074. synth_audio_r_p        dc    synth_audio+1024
  2075. synth_audio_pp        ds    1
  2076. synth_count18        ds    1
  2077.  
  2078. synth_imfct_p        dc    synth_imfct_slow
  2079. synth_window_p        dc    synth_window_start
  2080. synth_tab_rsincosx_p    dc    synth_tab_rsinxrcosx
  2081.  
  2082.  
  2083.  
  2084. ;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  2085. ;    dc    "***mbc***"
  2086. ;debug_mb_count    dc    0
  2087. ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  2088.  
  2089.  
  2090.  
  2091. htab00
  2092.  dc    0
  2093. htab01
  2094.  dc   -5,  -3,  -1,  17,   1,  16,   0
  2095. htab02
  2096.  dc  -15, -11,  -9,  -5,  -3,  -1,  34,   2,  18,  -1,  33,  32,  17,  -1,   1
  2097.  dc   16,   0
  2098. htab03
  2099.  dc  -13, -11,  -9,  -5,  -3,  -1,  34,   2,  18,  -1,  33,  32,  16,  17,  -1
  2100.  dc    1,   0
  2101. htab04
  2102.  dc    0
  2103. htab05
  2104.  dc  -29, -25, -23, -15,  -7,  -5,  -3,  -1,  51,  35,  50,  49,  -3,  -1,  19
  2105.  dc    3,  -1,  48,  34,  -3,  -1,  18,  33,  -1,   2,  32,  17,  -1,   1,  16
  2106.  dc    0
  2107. htab06
  2108.  dc  -25, -19, -13,  -9,  -5,  -3,  -1,  51,   3,  35,  -1,  50,  48,  -1,  19
  2109.  dc   49,  -3,  -1,  34,   2,  18,  -3,  -1,  33,  32,   1,  -1,  17,  -1,  16
  2110.  dc    0
  2111. htab07
  2112.  dc  -69, -65, -57, -39, -29, -17, -11,  -7,  -3,  -1,  85,  69,  -1,  84,  83
  2113.  dc   -1,  53,  68,  -3,  -1,  37,  82,  21,  -5,  -1,  81,  -1,   5,  52,  -1
  2114.  dc   80,  -1,  67,  51,  -5,  -3,  -1,  36,  66,  20,  -1,  65,  64, -11,  -7
  2115.  dc   -3,  -1,   4,  35,  -1,  50,   3,  -1,  19,  49,  -3,  -1,  48,  34,  18
  2116.  dc   -5,  -1,  33,  -1,   2,  32,  17,  -1,   1,  16,   0
  2117. htab08
  2118.  dc  -65, -63, -59, -45, -31, -19, -13,  -7,  -5,  -3,  -1,  85,  84,  69,  83
  2119.  dc   -3,  -1,  53,  68,  37,  -3,  -1,  82,   5,  21,  -5,  -1,  81,  -1,  52
  2120.  dc   67,  -3,  -1,  80,  51,  36,  -5,  -3,  -1,  66,  20,  65,  -3,  -1,   4
  2121.  dc   64,  -1,  35,  50,  -9,  -7,  -3,  -1,  19,  49,  -1,   3,  48,  34,  -1
  2122.  dc    2,  32,  -1,  18,  33,  17,  -3,  -1,   1,  16,   0
  2123. htab09
  2124.  dc  -63, -53, -41, -29, -19, -11,  -5,  -3,  -1,  85,  69,  53,  -1,  83,  -1
  2125.  dc   84,   5,  -3,  -1,  68,  37,  -1,  82,  21,  -3,  -1,  81,  52,  -1,  67
  2126.  dc   -1,  80,   4,  -7,  -3,  -1,  36,  66,  -1,  51,  64,  -1,  20,  65,  -5
  2127.  dc   -3,  -1,  35,  50,  19,  -1,  49,  -1,   3,  48,  -5,  -3,  -1,  34,   2
  2128.  dc   18,  -1,  33,  32,  -3,  -1,  17,   1,  -1,  16,   0
  2129. htab10
  2130.  dc -125,-121,-111, -83, -55, -35, -21, -13,  -7,  -3,  -1, 119, 103,  -1, 118
  2131.  dc   87,  -3,  -1, 117, 102,  71,  -3,  -1, 116,  86,  -1, 101,  55,  -9,  -3
  2132.  dc   -1, 115,  70,  -3,  -1,  85,  84,  99,  -1,  39, 114, -11,  -5,  -3,  -1
  2133.  dc  100,   7, 112,  -1,  98,  -1,  69,  53,  -5,  -1,   6,  -1,  83,  68,  23
  2134.  dc  -17,  -5,  -1, 113,  -1,  54,  38,  -5,  -3,  -1,  37,  82,  21,  -1,  81
  2135.  dc   -1,  52,  67,  -3,  -1,  22,  97,  -1,  96,  -1,   5,  80, -19, -11,  -7
  2136.  dc   -3,  -1,  36,  66,  -1,  51,   4,  -1,  20,  65,  -3,  -1,  64,  35,  -1
  2137.  dc   50,   3,  -3,  -1,  19,  49,  -1,  48,  34,  -7,  -3,  -1,  18,  33,  -1
  2138.  dc    2,  32,  17,  -1,   1,  16,   0
  2139. htab11
  2140.  dc -121,-113, -89, -59, -43, -27, -17,  -7,  -3,  -1, 119, 103,  -1, 118, 117
  2141.  dc   -3,  -1, 102,  71,  -1, 116,  -1,  87,  85,  -5,  -3,  -1,  86, 101,  55
  2142.  dc   -1, 115,  70,  -9,  -7,  -3,  -1,  69,  84,  -1,  53,  83,  39,  -1, 114
  2143.  dc   -1, 100,   7,  -5,  -1, 113,  -1,  23, 112,  -3,  -1,  54,  99,  -1,  96
  2144.  dc   -1,  68,  37, -13,  -7,  -5,  -3,  -1,  82,   5,  21,  98,  -3,  -1,  38
  2145.  dc    6,  22,  -5,  -1,  97,  -1,  81,  52,  -5,  -1,  80,  -1,  67,  51,  -1
  2146.  dc   36,  66, -15, -11,  -7,  -3,  -1,  20,  65,  -1,   4,  64,  -1,  35,  50
  2147.  dc   -1,  19,  49,  -5,  -3,  -1,   3,  48,  34,  33,  -5,  -1,  18,  -1,   2
  2148.  dc   32,  17,  -3,  -1,   1,  16,   0
  2149. htab12
  2150.  dc -115, -99, -73, -45, -27, -17,  -9,  -5,  -3,  -1, 119, 103, 118,  -1,  87
  2151.  dc  117,  -3,  -1, 102,  71,  -1, 116, 101,  -3,  -1,  86,  55,  -3,  -1, 115
  2152.  dc   85,  39,  -7,  -3,  -1, 114,  70,  -1, 100,  23,  -5,  -1, 113,  -1,   7
  2153.  dc  112,  -1,  54,  99, -13,  -9,  -3,  -1,  69,  84,  -1,  68,  -1,   6,   5
  2154.  dc   -1,  38,  98,  -5,  -1,  97,  -1,  22,  96,  -3,  -1,  53,  83,  -1,  37
  2155.  dc   82, -17,  -7,  -3,  -1,  21,  81,  -1,  52,  67,  -5,  -3,  -1,  80,   4
  2156.  dc   36,  -1,  66,  20,  -3,  -1,  51,  65,  -1,  35,  50, -11,  -7,  -5,  -3
  2157.  dc   -1,  64,   3,  48,  19,  -1,  49,  34,  -1,  18,  33,  -7,  -5,  -3,  -1
  2158.  dc    2,  32,   0,  17,  -1,   1,  16
  2159. htab13
  2160.  dc -509,-503,-475,-405,-333,-265,-205,-153,-115, -83, -53, -35, -21, -13,  -9
  2161.  dc   -7,  -5,  -3,  -1, 254, 252, 253, 237, 255,  -1, 239, 223,  -3,  -1, 238
  2162.  dc  207,  -1, 222, 191,  -9,  -3,  -1, 251, 206,  -1, 220,  -1, 175, 233,  -1
  2163.  dc  236, 221,  -9,  -5,  -3,  -1, 250, 205, 190,  -1, 235, 159,  -3,  -1, 249
  2164.  dc  234,  -1, 189, 219, -17,  -9,  -3,  -1, 143, 248,  -1, 204,  -1, 174, 158
  2165.  dc   -5,  -1, 142,  -1, 127, 126, 247,  -5,  -1, 218,  -1, 173, 188,  -3,  -1
  2166.  dc  203, 246, 111, -15,  -7,  -3,  -1, 232,  95,  -1, 157, 217,  -3,  -1, 245
  2167.  dc  231,  -1, 172, 187,  -9,  -3,  -1,  79, 244,  -3,  -1, 202, 230, 243,  -1
  2168.  dc   63,  -1, 141, 216, -21,  -9,  -3,  -1,  47, 242,  -3,  -1, 110, 156,  15
  2169.  dc   -5,  -3,  -1, 201,  94, 171,  -3,  -1, 125, 215,  78, -11,  -5,  -3,  -1
  2170.  dc  200, 214,  62,  -1, 185,  -1, 155, 170,  -1,  31, 241, -23, -13,  -5,  -1
  2171.  dc  240,  -1, 186, 229,  -3,  -1, 228, 140,  -1, 109, 227,  -5,  -1, 226,  -1
  2172.  dc   46,  14,  -1,  30, 225, -15,  -7,  -3,  -1, 224,  93,  -1, 213, 124,  -3
  2173.  dc   -1, 199,  77,  -1, 139, 184,  -7,  -3,  -1, 212, 154,  -1, 169, 108,  -1
  2174.  dc  198,  61, -37, -21,  -9,  -5,  -3,  -1, 211, 123,  45,  -1, 210,  29,  -5
  2175.  dc   -1, 183,  -1,  92, 197,  -3,  -1, 153, 122, 195,  -7,  -5,  -3,  -1, 167
  2176.  dc  151,  75, 209,  -3,  -1,  13, 208,  -1, 138, 168, -11,  -7,  -3,  -1,  76
  2177.  dc  196,  -1, 107, 182,  -1,  60,  44,  -3,  -1, 194,  91,  -3,  -1, 181, 137
  2178.  dc   28, -43, -23, -11,  -5,  -1, 193,  -1, 152,  12,  -1, 192,  -1, 180, 106
  2179.  dc   -5,  -3,  -1, 166, 121,  59,  -1, 179,  -1, 136,  90, -11,  -5,  -1,  43
  2180.  dc   -1, 165, 105,  -1, 164,  -1, 120, 135,  -5,  -1, 148,  -1, 119, 118, 178
  2181.  dc  -11,  -3,  -1,  27, 177,  -3,  -1,  11, 176,  -1, 150,  74,  -7,  -3,  -1
  2182.  dc   58, 163,  -1,  89, 149,  -1,  42, 162, -47, -23,  -9,  -3,  -1,  26, 161
  2183.  dc   -3,  -1,  10, 104, 160,  -5,  -3,  -1, 134,  73, 147,  -3,  -1,  57,  88
  2184.  dc   -1, 133, 103,  -9,  -3,  -1,  41, 146,  -3,  -1,  87, 117,  56,  -5,  -1
  2185.  dc  131,  -1, 102,  71,  -3,  -1, 116,  86,  -1, 101, 115, -11,  -3,  -1,  25
  2186.  dc  145,  -3,  -1,   9, 144,  -1,  72, 132,  -7,  -5,  -1, 114,  -1,  70, 100
  2187.  dc   40,  -1, 130,  24, -41, -27, -11,  -5,  -3,  -1,  55,  39,  23,  -1, 113
  2188.  dc   -1,  85,   7,  -7,  -3,  -1, 112,  54,  -1,  99,  69,  -3,  -1,  84,  38
  2189.  dc   -1,  98,  53,  -5,  -1, 129,  -1,   8, 128,  -3,  -1,  22,  97,  -1,   6
  2190.  dc   96, -13,  -9,  -5,  -3,  -1,  83,  68,  37,  -1,  82,   5,  -1,  21,  81
  2191.  dc   -7,  -3,  -1,  52,  67,  -1,  80,  36,  -3,  -1,  66,  51,  20, -19, -11
  2192.  dc   -5,  -1,  65,  -1,   4,  64,  -3,  -1,  35,  50,  19,  -3,  -1,  49,   3
  2193.  dc   -1,  48,  34,  -3,  -1,  18,  33,  -1,   2,  32,  -3,  -1,  17,   1,  16
  2194.  dc    0
  2195. htab14
  2196.  dc    0
  2197. htab15
  2198.  dc -495,-445,-355,-263,-183,-115, -77, -43, -27, -13,  -7,  -3,  -1, 255, 239
  2199.  dc   -1, 254, 223,  -1, 238,  -1, 253, 207,  -7,  -3,  -1, 252, 222,  -1, 237
  2200.  dc  191,  -1, 251,  -1, 206, 236,  -7,  -3,  -1, 221, 175,  -1, 250, 190,  -3
  2201.  dc   -1, 235, 205,  -1, 220, 159, -15,  -7,  -3,  -1, 249, 234,  -1, 189, 219
  2202.  dc   -3,  -1, 143, 248,  -1, 204, 158,  -7,  -3,  -1, 233, 127,  -1, 247, 173
  2203.  dc   -3,  -1, 218, 188,  -1, 111,  -1, 174,  15, -19, -11,  -3,  -1, 203, 246
  2204.  dc   -3,  -1, 142, 232,  -1,  95, 157,  -3,  -1, 245, 126,  -1, 231, 172,  -9
  2205.  dc   -3,  -1, 202, 187,  -3,  -1, 217, 141,  79,  -3,  -1, 244,  63,  -1, 243
  2206.  dc  216, -33, -17,  -9,  -3,  -1, 230,  47,  -1, 242,  -1, 110, 240,  -3,  -1
  2207.  dc   31, 241,  -1, 156, 201,  -7,  -3,  -1,  94, 171,  -1, 186, 229,  -3,  -1
  2208.  dc  125, 215,  -1,  78, 228, -15,  -7,  -3,  -1, 140, 200,  -1,  62, 109,  -3
  2209.  dc   -1, 214, 227,  -1, 155, 185,  -7,  -3,  -1,  46, 170,  -1, 226,  30,  -5
  2210.  dc   -1, 225,  -1,  14, 224,  -1,  93, 213, -45, -25, -13,  -7,  -3,  -1, 124
  2211.  dc  199,  -1,  77, 139,  -1, 212,  -1, 184, 154,  -7,  -3,  -1, 169, 108,  -1
  2212.  dc  198,  61,  -1, 211, 210,  -9,  -5,  -3,  -1,  45,  13,  29,  -1, 123, 183
  2213.  dc   -5,  -1, 209,  -1,  92, 208,  -1, 197, 138, -17,  -7,  -3,  -1, 168,  76
  2214.  dc   -1, 196, 107,  -5,  -1, 182,  -1, 153,  12,  -1,  60, 195,  -9,  -3,  -1
  2215.  dc  122, 167,  -1, 166,  -1, 192,  11,  -1, 194,  -1,  44,  91, -55, -29, -15
  2216.  dc   -7,  -3,  -1, 181,  28,  -1, 137, 152,  -3,  -1, 193,  75,  -1, 180, 106
  2217.  dc   -5,  -3,  -1,  59, 121, 179,  -3,  -1, 151, 136,  -1,  43,  90, -11,  -5
  2218.  dc   -1, 178,  -1, 165,  27,  -1, 177,  -1, 176, 105,  -7,  -3,  -1, 150,  74
  2219.  dc   -1, 164, 120,  -3,  -1, 135,  58, 163, -17,  -7,  -3,  -1,  89, 149,  -1
  2220.  dc   42, 162,  -3,  -1,  26, 161,  -3,  -1,  10, 160, 104,  -7,  -3,  -1, 134
  2221.  dc   73,  -1, 148,  57,  -5,  -1, 147,  -1, 119,   9,  -1,  88, 133, -53, -29
  2222.  dc  -13,  -7,  -3,  -1,  41, 103,  -1, 118, 146,  -1, 145,  -1,  25, 144,  -7
  2223.  dc   -3,  -1,  72, 132,  -1,  87, 117,  -3,  -1,  56, 131,  -1, 102,  71,  -7
  2224.  dc   -3,  -1,  40, 130,  -1,  24, 129,  -7,  -3,  -1, 116,   8,  -1, 128,  86
  2225.  dc   -3,  -1, 101,  55,  -1, 115,  70, -17,  -7,  -3,  -1,  39, 114,  -1, 100
  2226.  dc   23,  -3,  -1,  85, 113,  -3,  -1,   7, 112,  54,  -7,  -3,  -1,  99,  69
  2227.  dc   -1,  84,  38,  -3,  -1,  98,  22,  -3,  -1,   6,  96,  53, -33, -19,  -9
  2228.  dc   -5,  -1,  97,  -1,  83,  68,  -1,  37,  82,  -3,  -1,  21,  81,  -3,  -1
  2229.  dc    5,  80,  52,  -7,  -3,  -1,  67,  36,  -1,  66,  51,  -1,  65,  -1,  20
  2230.  dc    4,  -9,  -3,  -1,  35,  50,  -3,  -1,  64,   3,  19,  -3,  -1,  49,  48
  2231.  dc   34,  -9,  -7,  -3,  -1,  18,  33,  -1,   2,  32,  17,  -3,  -1,   1,  16
  2232.  dc    0
  2233. htab16
  2234.  dc -509,-503,-461,-323,-103, -37, -27, -15,  -7,  -3,  -1, 239, 254,  -1, 223
  2235.  dc  253,  -3,  -1, 207, 252,  -1, 191, 251,  -5,  -1, 175,  -1, 250, 159,  -3
  2236.  dc   -1, 249, 248, 143,  -7,  -3,  -1, 127, 247,  -1, 111, 246, 255,  -9,  -5
  2237.  dc   -3,  -1,  95, 245,  79,  -1, 244, 243, -53,  -1, 240,  -1,  63, -29, -19
  2238.  dc  -13,  -7,  -5,  -1, 206,  -1, 236, 221, 222,  -1, 233,  -1, 234, 217,  -1
  2239.  dc  238,  -1, 237, 235,  -3,  -1, 190, 205,  -3,  -1, 220, 219, 174, -11,  -5
  2240.  dc   -1, 204,  -1, 173, 218,  -3,  -1, 126, 172, 202,  -5,  -3,  -1, 201, 125
  2241.  dc   94, 189, 242, -93,  -5,  -3,  -1,  47,  15,  31,  -1, 241, -49, -25, -13
  2242.  dc   -5,  -1, 158,  -1, 188, 203,  -3,  -1, 142, 232,  -1, 157, 231,  -7,  -3
  2243.  dc   -1, 187, 141,  -1, 216, 110,  -1, 230, 156, -13,  -7,  -3,  -1, 171, 186
  2244.  dc   -1, 229, 215,  -1,  78,  -1, 228, 140,  -3,  -1, 200,  62,  -1, 109,  -1
  2245.  dc  214, 155, -19, -11,  -5,  -3,  -1, 185, 170, 225,  -1, 212,  -1, 184, 169
  2246.  dc   -5,  -1, 123,  -1, 183, 208, 227,  -7,  -3,  -1,  14, 224,  -1,  93, 213
  2247.  dc   -3,  -1, 124, 199,  -1,  77, 139, -75, -45, -27, -13,  -7,  -3,  -1, 154
  2248.  dc  108,  -1, 198,  61,  -3,  -1,  92, 197,  13,  -7,  -3,  -1, 138, 168,  -1
  2249.  dc  153,  76,  -3,  -1, 182, 122,  60, -11,  -5,  -3,  -1,  91, 137,  28,  -1
  2250.  dc  192,  -1, 152, 121,  -1, 226,  -1,  46,  30, -15,  -7,  -3,  -1, 211,  45
  2251.  dc   -1, 210, 209,  -5,  -1,  59,  -1, 151, 136,  29,  -7,  -3,  -1, 196, 107
  2252.  dc   -1, 195, 167,  -1,  44,  -1, 194, 181, -23, -13,  -7,  -3,  -1, 193,  12
  2253.  dc   -1,  75, 180,  -3,  -1, 106, 166, 179,  -5,  -3,  -1,  90, 165,  43,  -1
  2254.  dc  178,  27, -13,  -5,  -1, 177,  -1,  11, 176,  -3,  -1, 105, 150,  -1,  74
  2255.  dc  164,  -5,  -3,  -1, 120, 135, 163,  -3,  -1,  58,  89,  42, -97, -57, -33
  2256.  dc  -19, -11,  -5,  -3,  -1, 149, 104, 161,  -3,  -1, 134, 119, 148,  -5,  -3
  2257.  dc   -1,  73,  87, 103, 162,  -5,  -1,  26,  -1,  10, 160,  -3,  -1,  57, 147
  2258.  dc   -1,  88, 133,  -9,  -3,  -1,  41, 146,  -3,  -1, 118,   9,  25,  -5,  -1
  2259.  dc  145,  -1, 144,  72,  -3,  -1, 132, 117,  -1,  56, 131, -21, -11,  -5,  -3
  2260.  dc   -1, 102,  40, 130,  -3,  -1,  71, 116,  24,  -3,  -1, 129, 128,  -3,  -1
  2261.  dc    8,  86,  55,  -9,  -5,  -1, 115,  -1, 101,  70,  -1,  39, 114,  -5,  -3
  2262.  dc   -1, 100,  85,   7,  23, -23, -13,  -5,  -1, 113,  -1, 112,  54,  -3,  -1
  2263.  dc   99,  69,  -1,  84,  38,  -3,  -1,  98,  22,  -1,  97,  -1,   6,  96,  -9
  2264.  dc   -5,  -1,  83,  -1,  53,  68,  -1,  37,  82,  -1,  81,  -1,  21,   5, -33
  2265.  dc  -23, -13,  -7,  -3,  -1,  52,  67,  -1,  80,  36,  -3,  -1,  66,  51,  20
  2266.  dc   -5,  -1,  65,  -1,   4,  64,  -1,  35,  50,  -3,  -1,  19,  49,  -3,  -1
  2267.  dc    3,  48,  34,  -3,  -1,  18,  33,  -1,   2,  32,  -3,  -1,  17,   1,  16
  2268.  dc    0
  2269. htab24
  2270.  dc -451,-117, -43, -25, -15,  -7,  -3,  -1, 239, 254,  -1, 223, 253,  -3,  -1
  2271.  dc  207, 252,  -1, 191, 251,  -5,  -1, 250,  -1, 175, 159,  -1, 249, 248,  -9
  2272.  dc   -5,  -3,  -1, 143, 127, 247,  -1, 111, 246,  -3,  -1,  95, 245,  -1,  79
  2273.  dc  244, -71,  -7,  -3,  -1,  63, 243,  -1,  47, 242,  -5,  -1, 241,  -1,  31
  2274.  dc  240, -25,  -9,  -1,  15,  -3,  -1, 238, 222,  -1, 237, 206,  -7,  -3,  -1
  2275.  dc  236, 221,  -1, 190, 235,  -3,  -1, 205, 220,  -1, 174, 234, -15,  -7,  -3
  2276.  dc   -1, 189, 219,  -1, 204, 158,  -3,  -1, 233, 173,  -1, 218, 188,  -7,  -3
  2277.  dc   -1, 203, 142,  -1, 232, 157,  -3,  -1, 217, 126,  -1, 231, 172, 255,-235
  2278.  dc -143, -77, -45, -25, -15,  -7,  -3,  -1, 202, 187,  -1, 141, 216,  -5,  -3
  2279.  dc   -1,  14, 224,  13, 230,  -5,  -3,  -1, 110, 156, 201,  -1,  94, 186,  -9
  2280.  dc   -5,  -1, 229,  -1, 171, 125,  -1, 215, 228,  -3,  -1, 140, 200,  -3,  -1
  2281.  dc   78,  46,  62, -15,  -7,  -3,  -1, 109, 214,  -1, 227, 155,  -3,  -1, 185
  2282.  dc  170,  -1, 226,  30,  -7,  -3,  -1, 225,  93,  -1, 213, 124,  -3,  -1, 199
  2283.  dc   77,  -1, 139, 184, -31, -15,  -7,  -3,  -1, 212, 154,  -1, 169, 108,  -3
  2284.  dc   -1, 198,  61,  -1, 211,  45,  -7,  -3,  -1, 210,  29,  -1, 123, 183,  -3
  2285.  dc   -1, 209,  92,  -1, 197, 138, -17,  -7,  -3,  -1, 168, 153,  -1,  76, 196
  2286.  dc   -3,  -1, 107, 182,  -3,  -1, 208,  12,  60,  -7,  -3,  -1, 195, 122,  -1
  2287.  dc  167,  44,  -3,  -1, 194,  91,  -1, 181,  28, -57, -35, -19,  -7,  -3,  -1
  2288.  dc  137, 152,  -1, 193,  75,  -5,  -3,  -1, 192,  11,  59,  -3,  -1, 176,  10
  2289.  dc   26,  -5,  -1, 180,  -1, 106, 166,  -3,  -1, 121, 151,  -3,  -1, 160,   9
  2290.  dc  144,  -9,  -3,  -1, 179, 136,  -3,  -1,  43,  90, 178,  -7,  -3,  -1, 165
  2291.  dc   27,  -1, 177, 105,  -1, 150, 164, -17,  -9,  -5,  -3,  -1,  74, 120, 135
  2292.  dc   -1,  58, 163,  -3,  -1,  89, 149,  -1,  42, 162,  -7,  -3,  -1, 161, 104
  2293.  dc   -1, 134, 119,  -3,  -1,  73, 148,  -1,  57, 147, -63, -31, -15,  -7,  -3
  2294.  dc   -1,  88, 133,  -1,  41, 103,  -3,  -1, 118, 146,  -1,  25, 145,  -7,  -3
  2295.  dc   -1,  72, 132,  -1,  87, 117,  -3,  -1,  56, 131,  -1, 102,  40, -17,  -7
  2296.  dc   -3,  -1, 130,  24,  -1,  71, 116,  -5,  -1, 129,  -1,   8, 128,  -1,  86
  2297.  dc  101,  -7,  -5,  -1,  23,  -1,   7, 112, 115,  -3,  -1,  55,  39, 114, -15
  2298.  dc   -7,  -3,  -1,  70, 100,  -1,  85, 113,  -3,  -1,  54,  99,  -1,  69,  84
  2299.  dc   -7,  -3,  -1,  38,  98,  -1,  22,  97,  -5,  -3,  -1,   6,  96,  53,  -1
  2300.  dc   83,  68, -51, -37, -23, -15,  -9,  -3,  -1,  37,  82,  -1,  21,  -1,   5
  2301.  dc   80,  -1,  81,  -1,  52,  67,  -3,  -1,  36,  66,  -1,  51,  20,  -9,  -5
  2302.  dc   -1,  65,  -1,   4,  64,  -1,  35,  50,  -1,  19,  49,  -7,  -5,  -3,  -1
  2303.  dc    3,  48,  34,  18,  -1,  33,  -1,   2,  32,  -3,  -1,  17,   1,  -1,  16
  2304.  dc    0
  2305. htaba
  2306.  dc  -29, -21, -13,  -7,  -3,  -1,  11,  15,  -1,  13,  14,  -3,  -1,   7,   5
  2307.  dc    9,  -3,  -1,   6,   3,  -1,  10,  12,  -3,  -1,   2,   1,  -1,   4,   8
  2308.  dc    0
  2309. htabb
  2310.  dc  -15,  -7,  -3,  -1,  15,  14,  -1,  13,  12,  -3,  -1,  11,  10,  -1,   9
  2311.  dc    8,  -7,  -3,  -1,   7,   6,  -1,   5,   4,  -3,  -1,   3,   2,  -1,   1
  2312.  dc    0
  2313. htablinbits
  2314.  dc 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,6,8,10,13,4,5,6,7,8,9,11,13,0,0
  2315. htabs
  2316.  dc htab00,htab01,htab02,htab03,htab04,htab05,htab06,htab07,htab08,htab09
  2317.  dc htab10,htab11,htab12,htab13,htab14,htab15,htab16,htab16,htab16,htab16
  2318.  dc htab16,htab16,htab16,htab16,htab24,htab24,htab24,htab24,htab24,htab24
  2319.  dc htab24,htab24,htaba,htabb
  2320.  
  2321.  
  2322. sfbands_p
  2323.     ds    1
  2324. sfbands_tab
  2325.     dc    sfbands_44100,sfbands_48000,sfbands_32000
  2326. sfbands_44100
  2327.  dc 0,12,24,36,48,66,90,120,156,198,252,318,408,576
  2328. sfbands_48000
  2329.  dc 0,12,24,36,48,66,84,114,150,192,240,300,378,576
  2330. sfbands_32000
  2331.  dc 0,12,24,36,48,66,90,126,174,234,312,414,540,576
  2332. sfbandl_p
  2333.     ds    1
  2334. sfbandl_tab
  2335.     dc    sfbandl_44100,sfbandl_48000,sfbandl_32000
  2336. sfbandl_44100
  2337.  dc 0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576
  2338. sfbandl_48000
  2339.  dc 0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576
  2340. sfbandl_32000
  2341.  dc 0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576
  2342.  
  2343. pretab
  2344.  dc 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0
  2345.  
  2346.  
  2347. sfbtab0        dc    0,6,11,16,21
  2348. sfbtab1        dc    0,9,18,24,36
  2349. sfbtab2        dc    0,8,17,23,35
  2350.  
  2351. cs_ca_tab_p    dc    cs_ca_tab
  2352.  
  2353. imdct_windows
  2354. ;win_type=0  NORMAL_WINDOW
  2355.  dc $059552,$10b515,$1bb44b,$267d87,$30fbc5,$3b1a94,$44c63c,$4debe5,$5679bd
  2356.  dc $5e5f1b,$658c9a,$6bf440,$718992,$7641af,$7a1366,$7cf744,$7ee7aa,$7fe0d0
  2357.  dc $7fe0d0,$7ee7aa,$7cf744,$7a1366,$7641af,$718992,$6bf440,$658c9a,$5e5f1b
  2358.  dc $5679bd,$4debe5,$44c63c,$3b1a94,$30fbc5,$267d87,$1bb44b,$10b515,$059552
  2359. ;win_type=1  START_WINDOW
  2360.  dc $059552,$10b515,$1bb44b,$267d87,$30fbc5,$3b1a94,$44c63c,$4debe5,$5679bd
  2361.  dc $5e5f1b,$658c9a,$6bf440,$718992,$7641af,$7a1366,$7cf744,$7ee7aa,$7fe0d0
  2362.  dc $7fffff,$7fffff,$7fffff,$7fffff,$7fffff,$7fffff,$7ee7aa,$7641af,$658c9a
  2363.  dc $4debe5,$30fbc5,$10b515,$000000,$000000,$000000,$000000,$000000,$000000
  2364. ;win_type=2 -> useless, because this case is done by short block imdct code.
  2365. ; ds 36
  2366.  
  2367. slentab0    dc    0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4
  2368. slentab1    dc    0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3
  2369. newslen        ds    4
  2370.  
  2371. ;win_type=3  STOP_WINDOW
  2372.  dc $000000,$000000,$000000,$000000,$000000,$000000,$10b515,$30fbc5,$4debe5
  2373.  dc $658c9a,$7641af,$7ee7aa,$7fffff,$7fffff,$7fffff,$7fffff,$7fffff,$7fffff
  2374.  dc $7fe0d0,$7ee7aa,$7cf744,$7a1366,$7641af,$718992,$6bf440,$658c9a,$5e5f1b
  2375.  dc $5679bd,$4debe5,$44c63c,$3b1a94,$30fbc5,$267d87,$1bb44b,$10b515,$059552
  2376.  
  2377.  
  2378. imdct_l_tab
  2379. ;coefficients for long blocks imdct
  2380. ;they are stored in order of use, so do not change their order !
  2381. ;lots of them are divided by two in order to use fixed point representation
  2382.  
  2383. ;9 points idct on even indices and twiddle factors,
  2384. ;or butterflies for 36 points idct
  2385. ; all factors are/2
  2386. ;;; dc    $7fffff            ;2/2 = 1 ~ 0.999999 = $7fffff
  2387.  dc    1.8793852415718/2
  2388.  dc    1.532088886238/2
  2389.  dc    0.5
  2390.  dc    0.34729635533386/2
  2391.  dc    1.9696155060244/2    ;tmp0_
  2392.  dc    1.732050808/2
  2393.  dc    1.2855752193731/2
  2394.  dc    0.68404028665134/2
  2395. ;;; dc    $7fffff            ;tmp1
  2396. ;;; dc    0.5
  2397. ;;; dc    -0.5
  2398. ;;; dc    $800000            ;-1
  2399. ;;; dc    -0.5
  2400.  dc    1.732050808/2        ;tmp1_
  2401. ;;; dc    0
  2402. ;;; dc    -1.732050808/2
  2403. ;;; dc    -1.732050808/2
  2404. ;;; dc    $7fffff            ;tmp2
  2405.  dc    -0.34729635533386/2
  2406.  dc    -1.8793852415718/2
  2407. ;;; dc    0.5
  2408.  dc    1.532088886238/2
  2409.  dc    1.2855752193731/2    ;tmp2_
  2410.  dc    -1.732050808/2
  2411.  dc    -0.68404028665134/2
  2412.  dc    1.9696155060244/2
  2413. ;;; dc    $7fffff            ;tmp3
  2414.  dc    -1.532088886238/2
  2415.  dc    0.34729635533386/2
  2416. ;;; dc    0.5
  2417.  dc    -1.8793852415718/2
  2418.  dc    0.68404028665134/2    ;tmp3_
  2419.  dc    -1.732050808/2
  2420.  dc    1.9696155060244/2
  2421.  dc    -1.2855752193731/2
  2422. ;9 points idct on odd indices and twiddle factors,
  2423. ;or butterflies for 36 points idct
  2424. ; all factors are/2 except some o factors /8 or not divided.
  2425. ;;; dc    $7fffff            ;tmp0o
  2426.  dc    1.8793852415718/2
  2427.  dc    1.532088886238/2
  2428. ;;; dc    0.5
  2429.  dc    0.34729635533386/2
  2430.  dc    1.9696155060244/2    ;tmp0_o
  2431.  dc    1.732050808/2
  2432.  dc    1.2855752193731/2
  2433.  dc    0.68404028665134/2
  2434.  dc    0.501909918         ;o0 factor
  2435.  dc    5.736856623/8        ;o7 factor
  2436. ;;; dc    $7fffff            ;tmp1o
  2437. ;;; dc    0.5
  2438. ;;; dc    -0.5
  2439. ;;; dc    $800000
  2440. ;;; dc    -0.5
  2441.  dc    1.732050808/2        ;tmp1_o
  2442. ;;; dc    0
  2443. ;;; dc    -1.732050808/2
  2444. ;;; dc    -1.732050808/2
  2445.  dc    0.517638090        ;o1 factor
  2446.  dc    1.931851653/2        ;o6 factor
  2447. ;;; dc    $7fffff            ;tmp2o
  2448.  dc    -0.34729635533386/2
  2449.  dc    -1.8793852415718/2
  2450. ;;; dc    0.5
  2451.  dc    1.532088886238/2
  2452.  dc    1.2855752193731/2    ;tmp2_o
  2453.  dc    -1.732050808/2
  2454.  dc    -0.68404028665134/2
  2455.  dc    1.9696155060244/2
  2456.  dc    0.551688959        ;o2 factor
  2457.  dc    1.183100792/2        ;o5 factor
  2458. ;;; dc    $7fffff            ;tmp3o
  2459.  dc    -1.532088886238/2
  2460.  dc    0.34729635533386/2
  2461. ;;; dc    0.5
  2462.  dc    -1.8793852415718/2
  2463.  dc    0.68404028665134/2    ;tmp3_o
  2464.  dc    -1.732050808/2
  2465.  dc    1.9696155060244/2
  2466.  dc    -1.2855752193731/2
  2467.  dc    0.610387294        ;o3 factor
  2468.  dc    0.871723397        ;o4 factor
  2469.  dc    0.707106781/2        ;tmp4o + twiddle factor
  2470. ;;; dc    -0.707106781/2
  2471. ;;; dc    0.707106781/2
  2472. ;;; dc    -0.707106781/2
  2473. ;;; dc    0.707106781/2
  2474. ;factors for final tmp computation
  2475. imdct_l_tab2_p    dc    imdct_l_tab2
  2476. imdct_l_tab2
  2477.  dc    -0.250238171
  2478.  dc    -0.25215724
  2479.  dc    -0.2560698785
  2480.  dc    -0.262132281
  2481.  dc    -0.541196100 
  2482.  dc    -0.2818454865
  2483.  dc    -0.2964222615
  2484.  dc    -0.3151181035
  2485.  dc    -0.339085426
  2486.  dc    -0.370046808
  2487.  dc    -0.4106699075
  2488.  dc    -0.465289749
  2489.  dc    -0.5414201425
  2490.  dc    -1.306562965/2
  2491.  dc    -0.831377381
  2492.  dc    -1.155056579/2
  2493.  dc    -1.915324394/2
  2494.  dc    -5.731396405/8
  2495.  
  2496.  
  2497. imdct_s_tab
  2498. ;coefficients for short blocks imdct
  2499. ;they are stored in order of use, so do not change their order !
  2500. ;some of them are divided by two in order to use fixed point representation
  2501.  
  2502. ;3 points idct/6 points idct+twiddle factors for odd indices
  2503.  dc    0.866025403,0.5    ;for tmp0 and tmp5
  2504. ;;; dc    0.866025403,0.5
  2505.  dc    0.517638090        ;twiddle factor for tmp5
  2506. ;;; dc    0,$800000    ;for tmp1 and tmp4
  2507. ;;; dc    0,$800000
  2508.  dc    0.707106781        ;twiddle factor for tmp4
  2509.  dc    0.5
  2510. ;;; dc    -0.866025403,0.5 ;for tmp2 and tmp3
  2511. ;;; dc    -0.866025403,0.5
  2512.  dc    1.931851653/2        ;twiddle factor/2 for tmp3
  2513. ;12 points twiddle/shifting to imdct/windowing factors
  2514. imdct_s_tab2_p    dc    imdct_s_tab2
  2515. imdct_s_tab2
  2516.  dc    0.1072063584        ;first imdct point=out[6]
  2517.  dc    0.4999999996
  2518.  dc    2.33195123/4        ;/4
  2519.  dc    -3.03905801/4        ;/4
  2520.  dc    -1.207106781/2        ;/2
  2521.  dc    -0.8143131387
  2522.  dc    -0.6248444486
  2523.  dc    -0.4999999996
  2524.  dc    -0.4000995771
  2525.  dc    -0.3070072035
  2526.  dc    -0.2071067809
  2527.  dc    -0.08226233216
  2528.  
  2529.  
  2530.  
  2531.  
  2532.  
  2533.  
  2534.  
  2535.     org    y:
  2536.  
  2537.     align    16
  2538. cs_ca_tab
  2539.  dc  0.857492925712, -0.5144957554270
  2540.  dc  0.881741997318, -0.4717319685650
  2541.  dc  0.949628649103, -0.3133774542040
  2542.  dc  0.983314592492, -0.1819131996110
  2543.  dc  0.995517816065, -0.0945741925262
  2544.  dc  0.999160558175, -0.0409655828852
  2545.  dc  0.999899195243, -0.0141985685725
  2546.  dc  0.999993155067, -0.0036999746738
  2547.  
  2548. ;->ydata+16
  2549. busy    dc    0
  2550.  
  2551. ;->ydata+17
  2552. forcemono
  2553.     dc    0
  2554.  
  2555. ;->ydata+18
  2556. pow43tab
  2557.     ds    8206        ;comes from main prog (see 'MP3_pow43tab.h')
  2558.  
  2559. ;    dc    "**prev0**"
  2560. hybrid_prev0        ds    576
  2561. ;    dc    "**prev1**"
  2562. hybrid_prev1        ds    576
  2563. ;    dc    "**prev.**"
  2564.  
  2565.  
  2566. synth_tab_window
  2567.  dc $000000,$fff8c1,$003540,$ff8d41,$01fd40,$faf7c1,$066b80,$db63c1
  2568.  dc $494780,$249c40,$066b80,$050840,$01fd40,$0072c0,$003540,$000740
  2569.  dc $ffffc1,$fff841,$003680,$ff7e41,$01f400,$fa9cc1,$05d1c0,$d99601
  2570.  dc $493c00,$22ce00,$06f780,$04ad00,$0203c0,$006440,$003400,$000680
  2571.  dc $ffffc1,$fff741,$003780,$ff6ec1,$01e800,$fa4241,$052a00,$d7ca01
  2572.  dc $491a00,$20ffc0,$077600,$045240,$020800,$0056c0,$003280,$000600
  2573.  dc $ffffc1,$fff681,$003840,$ff5ec1,$01d940,$f9e8c1,$047440,$d60081
  2574.  dc $48e180,$1f32c0,$07e700,$03f7c0,$0209c0,$004980,$003100,$000540
  2575.  dc $ffffc1,$fff5c1,$0038c0,$ff4e41,$01c780,$f990c1,$03b000,$d43ac1
  2576.  dc $489240,$1d6800,$084b00,$039e40,$020940,$003d00,$002f80,$0004c0
  2577.  dc $ffffc1,$fff4c1,$003900,$ff3d41,$01b2c0,$f93a41,$02ddc0,$d279c1
  2578.  dc $482d00,$1ba040,$08a200,$0345c0,$0206c0,$003140,$002dc0,$000440
  2579.  dc $ffffc1,$fff3c1,$003900,$ff2c01,$019b00,$f8e641,$01fd40,$d0be81
  2580.  dc $47b1c0,$19dc80,$08ecc0,$02ef00,$020240,$002640,$002c00,$000400
  2581.  dc $ffff81,$fff2c1,$0038c0,$ff1a41,$017fc0,$f894c1,$010e80,$cf09c1
  2582.  dc $4720c0,$181d80,$092b40,$0299c0,$01fc00,$001bc0,$002a40,$000380
  2583.  dc $ffff81,$fff181,$003800,$ff0841,$016180,$f84681,$001180,$cd5cc1
  2584.  dc $467a40,$166440,$095e00,$024680,$01f440,$001200,$002840,$000340
  2585.  dc $ffff81,$fff041,$003740,$fef601,$014000,$f7fbc1,$ff0681,$cbb881
  2586.  dc $45bf00,$14b140,$098580,$01f580,$01ea80,$000900,$002680,$0002c0
  2587.  dc $ffff81,$ffef01,$0035c0,$fee3c1,$011ac0,$f7b541,$fded81,$ca1d81
  2588.  dc $44ef80,$130580,$09a1c0,$01a700,$01dfc0,$000080,$0024c0,$000280
  2589.  dc $ffff41,$ffedc1,$003400,$fed181,$00f280,$f77341,$fcc701,$c88d81
  2590.  dc $440bc0,$1161c0,$09b3c0,$015b00,$01d380,$fff8c1,$0022c0,$000240
  2591.  dc $ffff41,$ffec41,$003200,$febf41,$00c680,$f73681,$fb92c1,$c708c1
  2592.  dc $431500,$0fc6c0,$09bb80,$0111c0,$01c640,$fff1c1,$002100,$000200
  2593.  dc $ffff01,$ffeac1,$002f40,$fead01,$009740,$f6ff41,$fa5181,$c59081
  2594.  dc $420b40,$0e3500,$09b9c0,$00cb80,$01b7c0,$ffeb41,$001f40,$0001c0
  2595.  dc $ffff01,$ffe941,$002c40,$fe9b01,$006480,$f6ce01,$f90381,$c425c1
  2596.  dc $40ef80,$0cad00,$09af00,$008840,$01a880,$ffe581,$001d40,$0001c0
  2597.  dc $fffec1,$ffe7c1,$0028c0,$fe8981,$002e40,$f6a3c1,$f7a901,$c2c901
  2598.  dc $3fc280,$0b2fc0,$099b80,$004800,$019880,$ffe041,$001bc0,$000180
  2599.  dc $fffec1,$ffe601,$002480,$fe7841,$fff4c1,$f68041,$f64241,$c17b41
  2600.  dc $3e84c0,$09bdc0,$097fc0,$000b40,$0187c0,$ffdb81,$001a00,$000140
  2601.  dc $fffe81,$ffe441,$001fc0,$fe6781,$ffb801,$f66481,$f4d041,$c03d81
  2602.  dc $3d3700,$085700,$095c40,$ffd1c1,$017680,$ffd741,$001840,$000140
  2603.  dc $fffe41,$ffe2c1,$001a80,$fe5781,$ff77c1,$f65101,$f35301,$bf1081
  2604.  dc $3bda40,$06fc80,$093200,$ff9b81,$016500,$ffd3c1,$0016c0,$000100
  2605.  dc $fffe41,$ffe0c1,$0014c0,$fe4841,$ff3481,$f64641,$f1cb01,$bdf4c1
  2606.  dc $3a6f80,$05ae80,$0900c0,$ff68c1,$015300,$ffd0c1,$001540,$000100
  2607.  dc $fffe01,$ffdf01,$000e40,$fe39c1,$feee41,$f64481,$f03941,$bceb01
  2608.  dc $38f740,$046d40,$08c980,$ff3981,$0140c0,$ffce01,$0013c0,$0000c0
  2609.  dc $fffdc1,$ffdd41,$000740,$fe2c81,$fea501,$f64c41,$ee9e41,$bbf441
  2610.  dc $377280,$033900,$088cc0,$ff0d81,$012e80,$ffcc01,$001240,$0000c0
  2611.  dc $fffd81,$ffdb41,$ffff81,$fe2041,$fe5901,$f65e41,$ecfa81,$bb1081
  2612.  dc $35e280,$021280,$084ac0,$fee541,$011c40,$ffca41,$001100,$000080
  2613.  dc $fffd41,$ffd981,$fff701,$fe1581,$fe0a81,$f67a81,$eb4ec1,$ba4101
  2614.  dc $344780,$00f980,$080440,$fec001,$010a00,$ffc8c1,$000fc0,$000080
  2615.  dc $fffcc1,$ffd7c1,$ffee01,$fe0bc1,$fdb981,$f6a201,$e99bc1,$b985c1
  2616.  dc $32a340,$ffee81,$07b980,$fe9e81,$00f7c0,$ffc801,$000e80,$000080
  2617.  dc $fffc81,$ffd5c1,$ffe441,$fe0401,$fd6641,$f6d4c1,$e7e281,$b8df41
  2618.  dc $30f640,$fef181,$076b40,$fe8041,$00e5c0,$ffc741,$000d40,$000080
  2619.  dc $fffc01,$ffd401,$ffd9c1,$fdfdc1,$fd1101,$f71341,$e62381,$b84e41
  2620.  dc $2f4180,$fe02c1,$0719c0,$fe6501,$00d400,$ffc701,$000c40,$000040
  2621.  dc $fffbc1,$ffd241,$ffcec1,$fdf941,$fcba41,$f75e01,$e45fc1,$b7d301
  2622.  dc $2d8640,$fd2241,$06c5c0,$fe4d41,$00c2c0,$ffc701,$000b40,$000040
  2623.  dc $fffb41,$ffd081,$ffc301,$fdf6c1,$fc61c1,$f7b501,$e29801,$b76dc1
  2624.  dc $2bc540,$fc5001,$066f40,$fe3881,$00b1c0,$ffc741,$000a40,$000040
  2625.  dc $fffac1,$ffcf01,$ffb681,$fdf641,$fc0841,$f81901,$e0cd41,$b71e81
  2626.  dc $29ff80,$fb8bc1,$061740,$fe26c1,$00a140,$ffc7c1,$000980,$000040
  2627.  dc $fffa01,$ffcd81,$ffa941,$fdf801,$fbadc1,$f88a01,$df0041,$b6e601
  2628.  dc $283600,$fad601,$05bdc0,$fe1801,$009140,$ffc881,$0008c0,$000040
  2629.  dc $fff981,$ffcc01,$ff9bc1,$fdfc41,$fb5301,$f90881,$dd3201,$b6c401
  2630.  dc $266a00,$fa2e41,$056340,$fe0c01,$0081c0,$ffc981,$0007c0,$000040
  2631. synth_tab_sinx
  2632.  dc  0.000000, 0.049068, 0.098017, 0.146730    ;sine only
  2633.  dc  0.195090, 0.242980, 0.290285, 0.336890
  2634.  dc  0.382683, 0.427555, 0.471397, 0.514103
  2635.  dc  0.555570, 0.595699, 0.634393, 0.671559
  2636.  dc  0.707107, 0.740951, 0.773010, 0.803208
  2637.  dc  0.831470, 0.857729, 0.881921, 0.903989
  2638.  dc  0.923880, 0.941544, 0.956940, 0.970031
  2639.  dc  0.980785, 0.989177, 0.995185, 0.998795
  2640. synth_tab_cosx
  2641.  dc  0.999999, 0.998795, 0.995185, 0.989177    ;sine and cosine
  2642.  dc  0.980785, 0.970031, 0.956940, 0.941544
  2643.  dc  0.923880, 0.903989, 0.881921, 0.857729
  2644.  dc  0.831470, 0.803208, 0.773010, 0.740951
  2645.  dc  0.707107, 0.671559, 0.634393, 0.595699
  2646.  dc  0.555570, 0.514103, 0.471397, 0.427555
  2647.  dc  0.382683, 0.336890, 0.290285, 0.242980
  2648.  dc  0.195090, 0.146730, 0.098017, 0.049068
  2649.  dc  0.000000,-0.049068,-0.098017,-0.146730    ;cosine only
  2650.  dc -0.195090,-0.242980,-0.290285,-0.336890
  2651.  dc -0.382683,-0.427555,-0.471397,-0.514103
  2652.  dc -0.555570,-0.595699,-0.634393,-0.671559
  2653.  dc -0.707107,-0.740951,-0.773010,-0.803208
  2654.  dc -0.831470,-0.857729,-0.881921,-0.903989
  2655.  dc -0.923880,-0.941544,-0.956940,-0.970031
  2656.  dc -0.980785,-0.989177,-0.995185,-0.998795
  2657.  
  2658.  
  2659.  
  2660.  
  2661.  
  2662.  
  2663.  
  2664.  
  2665.  
  2666.     org    l:
  2667.     align    64
  2668. synth_imfct_slow
  2669.     ds    64
  2670.  
  2671. synth_tab_rsinxrcosx
  2672. ;    **    x:rsinx        y:rcosx
  2673.     dcl    0.000000,     0.999999
  2674.     dcl    0.999999,     0.000000
  2675.     dcl    0.707107,     0.707107
  2676.     dcl    0.707107,    -0.707107
  2677.     dcl    0.382683,     0.923880
  2678.     dcl    0.923880,    -0.382683
  2679.     dcl    0.923880,     0.382683
  2680.     dcl    0.382683,    -0.923880
  2681.     dcl    0.195090,     0.980785
  2682.     dcl    0.980785,    -0.195090
  2683.     dcl    0.831470,     0.555570
  2684.     dcl    0.555570,    -0.831470
  2685.     dcl    0.555570,     0.831470
  2686.     dcl    0.831470,    -0.555570
  2687.     dcl    0.980785,     0.195090
  2688.     dcl    0.195090,    -0.980785
  2689.     dcl    0.098017,     0.995185
  2690.     dcl    0.995185,    -0.098017
  2691.     dcl    0.773010,     0.634393
  2692.     dcl    0.634393,    -0.773010
  2693.     dcl    0.471397,     0.881921
  2694.     dcl    0.881921,    -0.471397
  2695.     dcl    0.956940,     0.290285
  2696.     dcl    0.290285,    -0.956940
  2697.     dcl    0.290285,     0.956940
  2698.     dcl    0.956940,    -0.290285
  2699.     dcl    0.881921,     0.471397
  2700.     dcl    0.471397,    -0.881921
  2701.     dcl    0.634393,     0.773010
  2702.     dcl    0.773010,    -0.634393
  2703.     dcl    0.995185,     0.098017
  2704.     dcl    0.098017,    -0.995185
  2705.  
  2706. ;ktab
  2707. ;    dcl     0.0000000/4,     1.0000000/4
  2708. ;    dcl     0.2113249/4,     0.7886751/4
  2709. ;    dcl     0.3660254/4,     0.6339746/4
  2710. ;    dcl     0.5000000/4,     0.5000000/4
  2711. ;    dcl     0.6339746/4,     0.3660254/4
  2712. ;    dcl     0.7886751/4,     0.2113249/4
  2713. ;    dcl     1.0000000/4,     0.0000000/4
  2714. ;    dcl     1.3660254/4,    -0.3660254/4    ;ispos==7
  2715. ;    dcl     2.3660254/4,    -1.3660254/4
  2716. ;    dcl     3.9888888/4,    -3.9888888/4    ;NaN (very large values)
  2717. ;    dcl    -1.3660254/4,     2.3660254/4
  2718. ;    dcl    -0.3660254/4,     1.3660254/4
  2719. ;    dcl     0.0000000/4,     1.0000000/4
  2720. ;    dcl     0.2113249/4,     0.7886751/4
  2721. ;    dcl     0.3660254/4,     0.6339746/4
  2722. ;    dcl     0.5000000/4,     0.5000000/4
  2723. ;    dcl     0.6339746/4,     0.3660254/4
  2724. ;    dcl     0.7886751/4,     0.2113249/4
  2725. ;    dcl     1.0000000/4,     0.0000000/4
  2726. ;    dcl     1.3660254/4,    -0.3660254/4
  2727. ;    dcl     2.3660254/4,    -1.3660254/4
  2728. ;    dcl     3.9888888/4,    -3.9888888/4    ;NaN (very large values)
  2729. ;    dcl    -1.3660254/4,     2.3660254/4
  2730. ;    dcl    -0.3660254/4,     1.3660254/4
  2731. ;    dcl     0.0000000/4,     1.0000000/4
  2732. ;    dcl     0.2113249/4,     0.7886751/4
  2733. ;    dcl     0.3660254/4,     0.6339746/4
  2734. ;    dcl     0.5000000/4,     0.5000000/4
  2735. ;    dcl     0.6339746/4,     0.3660254/4
  2736. ;    dcl     0.7886751/4,     0.2113249/4
  2737. ;    dcl     1.0000000/4,     0.0000000/4
  2738. ;    dcl     1.3660254/4,    -0.3660254/4
  2739.  
  2740.  
  2741. ;the end
  2742.